posted by 은이종 은이종 2017. 2. 7. 18:45

Tomcat 6, 7에서 8로 마이그레이션 시 유의해야할 사항

1. MaxPermSize 명칭 변경

- MaxPermSize => MaxMetaspaceSize

- PermSize => MetaspaceSize


2. conf/server.xml

- maxActive => maxTotal

- maxWait = maxWaitMillis

- remobeAbandoned => removeAbandonedOnBorrow or removeAbandonedOnMaintenance

- validationInterval => validationQueryTimeout 으로 변경

- mysql 사용시 initiaiSize 관련 오류가 발생하는 것 => jennifer에서 enable_jdbc_wrapper = true enable_reserved_sql_pointcut=false로 설정 변경 필요


3. conf/web.xml

- jsp 스펙 변화에 따른 내용 수정을 해야함

-- auth-constraint절 제거 또는 security-role절 추가

    <security-role>

        <role-name>manager</role-name>

    </security-role>

auth-constraint role-name manager 추가


4. Catalina 하위에 있는 manager.xml 제거 그리고 webapps/manager 제거


5. conf/web.xml 혹은 ~~~war/WEB-INF/web.xml

- jsp 스펙 변화에 따른 내용 수정을 해야함

- resource-ref에서 description 제거


6. jdbc 드라이버는 반드시 $TOMCAT/lib에 위치해야함

 

etc. tomcat HTTP2 채용으로 인한 native apr 관련해서 업데이트 필요

댓글을 달아 주세요

posted by 은이종 은이종 2016. 9. 6. 10:42

Java8부터 메타정보 관리 영역의 메모리 구조가 변경 됨에 따라 pre-java8 옵션을 더 이상 사용 할 수 없습니다.

하지만, 지금까지 pre-java8 옵션으로 설치되어 왔습니다.

 

As-is

-XX:MaxPermSize=256m

 

To-be

-XX:MaxMetaspaceSize=256m

 

 

Java8에 기존 설정 (-XX:MaxPermSize)을 적용하면 다행히도(?) 설정이 무시되고 기본으로 -XX:MaxMetaspaceSize=unlimited 설정됩니다.

MaxMetaspaceSize의 기본 값이 unlimited이기 때문에 어플 특성에 따른 native 메모리 누수 발생시 최악의 경우 아예 OS가 뻗을 수 있을 것 같습니다.

native메모리 누수가 없다고 100% 장담 할 수 없기 때문에 제한을 두어야 한다고 봅니다.

 

 

대응

l  설치 스크립트에 java8의 경우 -XX:MaxMetaspaceSize=256m 가 적용되게 변경

l  기존 Java8 탑재 Tomcat MaxMetaspaceSize 모니터링

n  MaxMetaspaceSize에 특이사항이 없는지 확인(너무 과도하게 점유하지 않는지)

n  각 서비스 WAS 옵션 변경

댓글을 달아 주세요

posted by 은이종 은이종 2016. 7. 28. 17:48

Tomcat Session Cluster

작업 후에 정상적으로 Session이 유지되는지 확인하는 jsp 파일입니다


내용은

========================================================

session_check.jsp


<%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
<%@ page import="java.text.*"%>
<%@ page import="java.util.*"%>
<%
        String RsessionId = request.getRequestedSessionId();
        String sessionId = session.getId();
        boolean isNew = session.isNew();
        long creationTime = session.getCreationTime();
        long lastAccessedTime = session.getLastAccessedTime();
        int maxInactiveInterval = session.getMaxInactiveInterval();
        Enumeration e = session.getAttributeNames();
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Session Test</title>
</head>
<body>
<table border=1 bordercolor="gray" cellspacing=1 cellpadding=0
        width="100%">
        <tr bgcolor="gray">
                <td colspan=2 align="center"><font color="white"><b>Session
                Info</b></font></td>
        </tr>
        <tr>
                <td>Server HostName</td>
                <td><%=java.net.InetAddress.getLocalHost().getHostName()%></td>
        </tr>
        <tr>
                <td>Server IP</td>
                <td><%=java.net.InetAddress.getLocalHost()
                                                                        .getHostAddress()%></td>
        </tr>
        <tr>
                <td>Request SessionID</td>
                <td><%=RsessionId%></td>
        </tr>
        <tr>
                <td>SessionID</td>
                <td><%=sessionId%></td>
        </tr>
        <tr>
                <td>isNew</td>
                <td><%=isNew%></td>
        </tr>
        <tr>
                <td>Creation Time</td>
                <td><%=new Date(creationTime)%></td>
        </tr>
        <tr>
                <td>Last Accessed Time</td>
                <td><%=new Date(lastAccessedTime)%></td>
        </tr>
        <tr>
                <td>Max Inactive Interval (second)</td>
                <td><%=maxInactiveInterval%></td>
        </tr>
        <tr bgcolor="cyan">
                <td colspan=2 align="center"><b>Session Value List</b></td>
        </tr>
        <tr>
                <td align="center">NAME</td>
                <td align="center">VAULE</td>
        </tr>
        <%
                String name = null;
                while (e.hasMoreElements()) {
                        name = (String) e.nextElement();
        %>
        <tr>
                <td align="left"><%=name%></td>
                <td align="left"><%=session.getAttribute(name)%></td>
        </tr>
        <%
                }
        %>


</table>

        <%

                int count = 0;

                if(session.getAttribute("count") != null)
                        count = (Integer) session.getAttribute("count");

                count += 1;

                session.setAttribute("count", count);

                out.println(session.getId() + "     :     " + count);
        %>
</body>
</html>

================================================================


페이지를 띄우면 아래와 같은 화면이 나오는데


SessionID 가 동일하게 유지가 되면서 호출한 카운트가 나온다

server hostName이 바뀌는데도 Session ID 정상적으로 유지되면서 카운트가 증가하면

정상적으로 설정되었다고 보면 된다.



댓글을 달아 주세요

posted by 은이종 은이종 2015. 9. 14. 18:23

 

1. tomcat-user.xml

에서 계정 제대로 되어있는지.

 

2.manager.xml 에 제대로 설정되어있는지.

댓글을 달아 주세요

posted by 은이종 은이종 2014. 11. 12. 18:53


 가끔 필요할 때가 있어서 스크립트 생성해보았습니다.

Instance 변경시 주의해야할 점은
1. Instance 폴더 변경
2. 사용하는 Docroot / Deploy 쪽 폴더 변경
3. 구동 및 정지 배치파일
4. loging, server.xml, 등 설정 파일 변경

파일명은 간단히 change_instance.sh

 
처음에 설정하는 디렉토리명 등 상황에 맞춰서 설정 후 사용하면 됩니다. 

================================================================================



#!/bin/sh

## 디렉토리명 설정##
FORCE=0
[ ! -z $1 ] && [ "$1" == "-f" ] && FORCE=1
[ ! -z $1 ] && [ "$1" == "-ff" ] && FORCE=2
APPNAME=tomcat
APP_PREFIX=/app/tomcat
DOCROOT=/app/docroot
DEPLOY=/app/deploy

echo
echo "============================= "
echo "Java 실행중인지 체크!!!!!     "
echo "============================= "
echo

ps aufx | grep svr_*

echo; echo
echo "============================= "
read -p "실행 중인지 확인됐나요?"
echo "============================= "
echo "Tomcat Instacne Check!! Enter "
echo "============================= "

/bin/ls -l $APP_PREFIX/ | grep svr_*

echo "=============================="
echo " Now Intance, Chagne Instance "
echo " Now : " & read l
echo " Change : " & read i
echo "============================"
echo " N  o w : $l"
echo " Change : $i"
echo "============================"

if [ $FORCE -lt 1 ];then
    read -p "Are you Continue [y/N] : " cont
    if ! [ "0$cont" == "0Y" -o "0$cont" == "0y" ];then
        echo "Bye~!"
        exit 1
    fi
fi

mv ${APP_PREFIX}/${l} ${APP_PREFIX}/${i}
mv ${DOCROOT}/${APPNAME}/${l} ${DOCROOT}/${APPNAME}/${i}
mv ${DEPLOY}/${APPNAME}/${l} ${DEPLOY}/${APPNAME}/${i}

mv ${APP_PREFIX}/bin/start${l}.sh ${APP_PREFIX}/bin/start${i}.sh
mv ${APP_PREFIX}/bin/stop${l}.sh ${APP_PREFIX}/bin/stop${i}.sh

/usr/bin/perl -p -i -e "s/${l}/${i}/g" ${APP_PREFIX}/bin/start${i}.sh
/usr/bin/perl -p -i -e "s/${l}/${i}/g" ${APP_PREFIX}/bin/stop${i}.sh  
/usr/bin/perl -p -i -e "s/${l}/${i}/g" ${APP_PREFIX}/${i}/conf/logging.properties
/usr/bin/perl -p -i -e "s/${l}/${i}/g" ${APP_PREFIX}/${i}/conf/server.xml 
/usr/bin/perl -p -i -e "s/${l}/${i}/g" ${APP_PREFIX}/${i}/conf/Catalina/localhost/manager.xml


echo
echo " ====================================="
echo " == Instance Name $APP_PREFIX/========"
echo " ====================================="
/bin/ls -l $APP_PREFIX/ | grep svr_*
echo
echo " ====================================="
echo " === start script $APP_PREFIX/bin ===="
echo " ====================================="
/bin/ls -l $APP_PREFIX/bin/*${i}.sh
echo
echo " ====================================="
echo " === DOCROOT ${DOCROOT}/${APPNAME} ==="
echo " ====================================="
/bin/ls -l ${DOCROOT}/${APPNAME}/ | tail -1
echo
echo " ====================================="
echo " === DEPLOY ${DEPLOY}/${APPNAME} ====="
echo " ====================================="
/bin/ls -l ${DEPLOY}/${APPNAME}/ | tail -1
echo " ====================================="
echo " ====================================="
echo " =  End                              ="
echo " ====================================="

========================================================================
 
 

댓글을 달아 주세요