아파치 웹 서버와 톰캣을 연동하기에 앞서 연동함으로써 얻는 이점은 무엇인지,

어떤 원리로 연동하게 되는지 알아보려합니다.

아파치와 톰캣을 연동하는 이유로 널리 알려진 바는 아래와 같습니다.

1. 톰캣은 정적인 페이지를 로드하기에 아파치 보다 느린 처리속도를 보인다.

2. 톰캣은 설정할 수 있는 내용들이 아파치에 비해 부족하다.

3. 톰캣은 아파치보다 부하에 약하다.

4. 톰캣만으로는 서블릿/JSP밖에 서비스할 수 없다.

5. 톰캣과 아파치를 연동하여 부하분담이 가능하다.(다수의 톰캣 구성으로의 로드밸런싱의 의미가 아닌 톰캣만으로 처리가능한 static page를 apache에서 대신함으로써의 부하 분담)

통상적으로 많은 사람분들이 말하시는 연동이유는 1번과 5번이 많은 것 같습니다.

톰캣으로 작업이 가능하지만, apache를 연동하여 static page의 처리를 분담하여 처리한다.

하지만 이에 대해서 인용되는 글이 있습니다.

톰캣과 아파치의 연동이 위와 같은 이유에서는 불필요하다는 요지의 글인데 아래 링크에서 확인 가능합니다.

http://www.tomcatexpert.com/blog/2010/03/24/myth-or-truth-one-should-always-use-apache-httpd-front-apache-tomcat-improve-perform

정리하면 톰캣 5.5이상에서 httpd의 native 모듈로 static page를 처리하므로 1번과 5번은 큰 의미가 없다는 것입니다.

즉 단순히 속도의 문제(1번)라면 (톰캣 5.5 이하의 버전일 경우를 제외할 때) 둘을 연동할 필요는 없습니다.
5번째 부하분담의 문제에는 1번의 경우와는 약간 다른데, 이 경우는 static page를 tomcat이 직접 처리하여 생기는 부하와 apache에서 대신처리하기 위해 앞쪽에 아파치를 놓음으로써 생기는 작업 분산에 대한 부하를 비교해봐야 할 것입니다.
(5번에 대해서는 정적인 페이지에 대한 처리로 인한 부하 감소 효과가 있을 것으로 생각합니다.)

5번의 경우 정확한 성능비교를 할 수 는 없었지만, 여러 정보를 종합해 볼때, staitc page의 처리 속도와 부하, 불안정성으로 인한 연동은 tomcat의 성능개선으로 인해 의미가 많이 줄어든 것 같습니다.

그렇다면 남은 이유는 2번과 4번입니다.

아파치의 다양한 옵션들(mod_security, mod_rewrite , 로드밸런싱등의 여러가지 모듈)을 사용할 수 있다는 점과, 다른 서버사이드 애플리케이션을 사용할 수 있다는 것이 큰 이점입니다.

예를 들어, apache와 tomcat으로 구축한 웹사이트 (html , css , jsp등)에서 보안모듈이나 , 리다이렉션 기능을 추가하는것은 간단한 일이며, 갑자기 php페이지가 추가되어야 한다고 해도, 이미 안정화된 사이트에서 추가로 php를 사용하는 것은 몇분이면 충분히 해결 할 수 있기 때문입니다.

종합해보면 , 기본적으로 apache에서 static page를 맡아 처리하고 tomcat은 JSP/Servlet 이라는 점에서의 연동도 의미가 있지만, 그보다 apache는 확장이라는 측면, tomcat의 자바업무 수행이라는 측면으로 자료의 확장자 이상의 의미로 연동한다고 생각합니다.

출처 : http://nomore7.tistory.com/5

## tomcat Error 내용 / 실제 웹에서는 HTTP Status 500 – javax.servlet.ServletExeption 메세지 발생.

SEVERE: Servlet.service() for servlet [jsp] in context with path [] threw exception [javax.servlet.ServletException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 92226 seconds ago.The last packet sent successfully to the server was 94605 seconds ago, which is longer than the server configured value of ‘wait_timeout’. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property ‘autoReconnect=true’ to avoid this problem.] with root cause
java.net.SocketException: Broken pipe

# 사용환경
tomcat 7.x / java 1.7 / mysql 5.5

#원인
tomcat <> mysql간 연결 상태가 유휴 상태일 때 끊어지면서 발생하는 메시지.
DB 커넥션이 맺어진 후 사용이 없다보니 유휴상태로 변경 되면서 커넥션이 끊어짐

# 해결 방안 1.
특정 시간마다 커넥션 확인 하는 셋팅 추가
web-xml

# 해결 방안 2.
my.cnf 수정을 통해 mysql wait_timeout 값을 수정
wait_timeout = 3600

참고 URL : http://www.databaseskill.com/2971555/
참고 URL : http://stackoverflow.com/questions/15949/javatomcat-dying-database-connection
참고 URL : http://fbwotjq.tistory.com/entry/IBATIS-%EC%BB%A4%EB%84%A5%EC%85%98-%EC%97%90%EB%9F%AC
참고 URL : http://stackoverflow.com/questions/15949/javatomcat-dying-database-connection

apache는 참 심플한데, tomcat은 까다롭다..

설정하는 것도, 튜닝하는 것도 여러가지 손 봐줘야할 것들이 참 많다.

 

java와 php를 함께 사용 하기 위해서는 apache + tomcat 연동해서 사용 하는 방법이 가장 많이 사용 되며, 일반적인 방법이다.

또 한가지 방법은 php-java-bridge를 설치해서 연동 해주는 방법이 존재한다.

(헌데 이 방법은 시도 해보다가 실패하여 시간이 없는 관계로 다음 포스팅에 대체 하도록 할 예정.)

 

하고자 했던 작업은 이렇다 단독톰캣 사용 하다가 php를 사용해야 했고,

몇몇개의 서브도메인이 존재하며, port base의 가상호스트 설정도 필요.

(php-java-bridge 설치를 하고자 했으나 실패. 그래서 apache 연동 설정으로 변경.)

 

 

apache 설치과정 생략.

tomcat path : /usr/local/tomcat

apache path : /usr/local/apache2

php path : /usr/local/php

 

– tomcat 단독 구성 되어 있었기 때문에 80 port 사용 => 8080 port 변경

vi /usr/local/tomcat/conf/server.xml

#=== 중략 ====

<Connector port=”8080” protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />
<!– A “Connector” using the shared thread pool–>
<!–
<Connector executor=”tomcatThreadPool”
port=”8080″ protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />

 

* 반대로 위 커넥터 부분의 port를 Default 상태인 8080 => 80으로 변경하여 단독 톰켓 구성이 가능하다.

 

apache workers.properties 설정

– 80 외에 8009, 9099 port 와 같이 두개의 포트 추가 사용을 위해 세개의 worker.list 추가

vi /usr/local/apache2/conf/workers.properties

 

workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/java/
ps=/
worker.list=rubi1,rubi2,rubi3

worker.rubi1.port=8009
worker.rubi1.host=localhost
worker.rubi1.type=ajp13
worker.rubi1.lbfactor=1

worker.rubi2.port=8010
worker.rubi2.host=localhost
worker.rubi2.type=ajp13
worker.rubi2.lbfactor=1

worker.rubi3.port=8011
worker.rubi3.host=localhost
worker.rubi3.type=ajp13
worker.rubi3.lbfactor=1

 

apache 가상호스트 설정 (아파치 기본 설정 생략)

– vi /usr/local/apache2/conf/extra/httpd-vhosts.conf

 

NameVirtualHost *:80

NameVirtualHost *:8001
NameVirtualHost *:9099

 

<VirtualHost *:80>
ServerAdmin admin@rubi.kr
DocumentRoot “/home/rubi/public_html
ServerName rubi.kr
ServerAlias www.rubi.kr
ErrorLog “logs/www.rubi.kr-error_log”
CustomLog “logs/www.rubi.kr-access_log” common
JkMount /*.jsp rubi1
JkMount /*.do rubi1

JkMount /servlet/* rubi1
</VirtualHost>

<VirtualHost *:8001>
ServerAdmin admin@rubi.kr

DocumentRoot “/home/rubi/www2
ServerName rubi.kr
ServerAlias www.rubi.kr
ErrorLog “logs/8001-error_log”
CustomLog “logs/8001-access_log” common
JkMount /*.jsp rubi2
JkMount /*.do rubi2
JkMount /servlet/* rubi2
</VirtualHost>

<VirtualHost *:9099>
ServerAdmin admin@rubi.kr
DocumentRoot “/home/rubi/www3
ServerName rubi.kr
ServerAlias www.rubi.kr
ErrorLog “logs/9099-error_log”
CustomLog “logs/9099-access_log” common
JkMount /*.jsp rubi3
JkMount /*.do rubi3
JkMount /servlet/* rubi3
</VirtualHost>

 

 

– tomcat 가상호스트 설정

가상호스트 추가 진행, 기본 localhost path 변경

 

vi /usr/local/tomcat/conf/server.xml

 

<Host name=”rubi.kr” appBase=”/home/rubi/public_html”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”” reloadable=”true”/>
<Alias>www.rubi.kr</Alias>

 

<!– 80port로 2차 호스트인 test.rubi.kr 가상호스트 추가 –>

<Host name=”test.rubi.kr” appBase=”/home/test/www”

unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”” reloadable=”true”/>
</Host>

 

</Engine>
</Service>

 

<!– port 변경에 따른

<Service name=”Catalina2″>
<Connector port=”8002” protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />
<Connector port=”8010″ protocol=”AJP/1.3″ redirectPort=”8443″ />
<Engine name=”Catalina2” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>
<Host name=”rubi.kr” appBase=“/home/rubi/www2”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”” reloadable=”true”/>
</Host>
</Engine>
</Service>
<Service name=”Catalina3“>
<Connector port=”9100” protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />
<Connector port=”8011″ protocol=”AJP/1.3″ redirectPort=”8443″ />
<Engine name=”Catalina3” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>
<Host name=”rubi.kr” appBase=“/home/rubi/www3”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”” reloadable=”true”/>
</Host>
</Engine>
</Service>

 

 

tomcat 가상 호스트 설정시 아래 부분을 추가 해줌으로써 appbase= 지정경로 밑에 ROOT를 홈디렉토리로 인식하는 부분을 해결 할 수 있다.

<Context path=”” docBase=”” reloadable=”true”/>

 

여기까지가 설정 모두 종료.

 

http://www.rubi.kr/ 연결시 /home/rubi/public_html/ 내용 출력

http://www.rubi.kr:8001 연결시 /home/rubi/www2 출력

http://www.rubi.kr:9099 연결시 /home/rubi/www3 출력

http://test.rubi.kr 연결시 /home/test/www 출력

 

 

Tomcat 무분별하게 catalina.out 크기 커지는것 막기

기존에 작성했던 [이곳]의 글은 catalina.out 파일을 쓰지 못하게 하여 중복 로깅을 못하게 하는 방법이었습니다.
실제로 톰캣은 catalina.<날짜>와 catalina.out 두개의 파일을 로깅하고 있어 퍼포먼스에 조금 신경이 쓰이는 부분이었습니다.

기존의 글을 토대로 catalina.out을 제거하였다고 쳐도 admin이나 localhost같은 특이한 로그 파일이 자꾸 늘어나는것도 신경이 조금 쓰이더군요.

톰캣의 conf 디렉토리 안에있는 logging.properties 안의 내용을 다음과 같이 수정하여 봅시다.

위의 내용을 제외한 나머지는 모두 주석처리 해버리면 catalina.<날짜> 형태의 로그 외에는 모두 기록하지 않습니다.

개발환경이 아닌 단순 서비스 환경에서는 이렇게 로그를 최소화 하는것이 좋겠네요.

1catalina.org.apache.juli.FileHandler.level 의 값을 조정하여 로그 레벨을 정의할수도 있습니다.

——————————————————————————————————

일 단. 톰캣로그를 날짜별로 남기는 녀석이 누구인가 알아보니. tomcat6.0 conf디렉토리에 있는 logging.proerties파일에 정의된 *..org.apache.juli.FileHandler클래스들이다. 이 녀석들은 콘솔출력과 별개로 날짜별로 로그파일을 생성한다. 즉, 콘솔출력을 catalina.out으로 저장하는 부분만 막으면 문제는 해결된다.

org.apache.catalina.startup.Bootstrap “$@” start >> /dev/null 2>&1 &
#      org.apache.catalina.startup.Bootstrap “$@” start \
#      >> “$CATALINA_BASE”/logs/catalina.out 2>&1 &

위와 같이 catalina.sh를 바꾸어주면 된다. 이런곳이 2군데 있다.

—————————————————————————————————-

cronolog라는 놈을 www.cronolog.org 에 가서 다운받는다.

 

설치방법
* root 로 설치해야 한다.
./configure
make
make install

 

그런다음 catalina.sh 파일을 수정한다.
.
.
.
.
  shift
touch “$CATALINA_BASE”/logs/catalina.out
if [ “$1” = “-security” ] ; then
echo “Using Security Manager”
shift
“$_RUNJAVA” $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs=”$JAVA_ENDORSED_DIRS” -classpath “$CLASSPATH” \
-Djava.security.manager \
-Djava.security.policy==”$CATALINA_BASE”/conf/catalina.policy \
-Dcatalina.base=”$CATALINA_BASE” \
-Dcatalina.home=”$CATALINA_HOME” \
-Djava.io.tmpdir=”$CATALINA_TMPDIR” \
     org.apache.catalina.startup.Bootstrap “$@” \
start |/usr/local/sbin/cronolog “$CATALINA_BASE”/logs/catalina.out.%y%m%d >> /dev/null 2>&1 &
#      org.apache.catalina.startup.Bootstrap “$@” start \
#      >> “$CATALINA_BASE”/logs/catalina.out 2>&1 &
     if [ ! -z “$CATALINA_PID” ]; then
echo $! > $CATALINA_PID
fi
else
“$_RUNJAVA” $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs=”$JAVA_ENDORSED_DIRS” -classpath “$CLASSPATH” \
-Dcatalina.base=”$CATALINA_BASE” \
-Dcatalina.home=”$CATALINA_HOME” \
-Djava.io.tmpdir=”$CATALINA_TMPDIR” \
     org.apache.catalina.startup.Bootstrap “$@” \
start |/usr/local/sbin/cronolog “$CATALINA_BASE”/logs/catalina.out.%y%m%d >> /dev/null 2>&1 &
#      org.apache.catalina.startup.Bootstrap “$@” start \
#      >> “$CATALINA_BASE”/logs/catalina.out 2>&1 &
.
.
.
.
start 포함해서 한줄에 작성해야 한다.
기존 문장은 주석처리 하든 지우던 하공…
그리고, shutdown.sh를 이용해 톰캣을 죽일때
cronolog도 같이 죽지만,
때에 따라 안죽는 경우도 있으니
ps 명령을 이용해 죽었는지 확인해야한다.
ps -ef cronolog

—————————————————————————————————

# Configuration of Web log
#log4j.rootLogger=DEBUG,console,INFO, web
#log4j.rootLogger = INFO, stdout
#핸들러의 로깅레벨은 SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST or ALL 이 있습니다

log4j.rootLogger=CONSOL , DEBUG , ERROR , SYSTEM , WARN , WEB
log4j.appender.CONSOL=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOL.Append=true
log4j.appender.CONSOL.ImmediateFlush=true
log4j.appender.CONSOL.Threshold=INFO
log4j.appender.CONSOL.DatePattern=’.’yyyy-MM-dd
log4j.appender.CONSOL.MaxFileSize=20MB
log4j.appender.CONSOL.MaxBackupIndex=10

#Layout 형식 : TTCCLayout, HTMLLayout,  XMLLayout, PatternLayout, SimpleLayout
#PatternLayout, SimpleLayout – 자바의 Throwable 에러들과 예외를 무시한다
log4j.appender.CONSOL.layout=org.apache.log4j.PatternLayout

 

#소스코드의 위치정보를 출력한다. %C. %M(%F:%L) 의 축약형이다 / %d %-5p [%t] %-17c{2} (%13F:%L) %3x – %m%n
log4j.appender.CONSOL.layout.ConversionPattern=[%-5p] %d{HH:mm:ss} [%c] [time: %r] – %m%n

 

# 로그파일 경로.
#log4j.appender.CONSOL.File=C:/javadev/develop/logs/mmsgw_web/
#log4j.appender.CONSOL.File=C:/egovframeworkSample/workspace/mmsgw_web/WebContent/WEB-INF/classes/logs
log4j.appender.CONSOL.File={catalina.home}/logs/tomcat.consol.log

 

#[%d{yyyy-MM-dd}형식은 프로그램의 실행속도를 느리게 함으로 SimpleDateFormat 형식지정한다
log4j.appender.CONSOL.layout.DateFormat=ISO8601

 

#[YYYY-MM-DD HH:MM:SS, mm] 형식을 뜻한다.
log4j.appender.CONSOL.layout.TimeZoneID=GMT-8:00

 

 

 
#매일 자정에 로그파일을 교체하며 기존파일은 xx.log_2004.07.12  org.apache.log4j.ConsoleAppender , DailyRollingFileAppender
log4j.appender.SYSTEM=org.apache.log4j.RollingFileAppender
log4j.appender.SYSTEM.Append=true
log4j.appender.SYSTEM.DatePattern=’.’yyyy-MM-dd
log4j.appender.SYSTEM.Threshold=INFO
log4j.appender.SYSTEM.ImmediateFlush=true
log4j.appender.SYSTEM.MaxFileSize=20MB
log4j.appender.SYSTEM.MaxBackupIndex=10

#자바의 Throwable 에러들과 예외를 포함하기 위해 HTMLLayout을 사용한다.
log4j.appender.SYSTEM.layout=org.apache.log4j.PatternLayout

#[%d{yyyy-MM-dd}형식은 프로그램의 실행속도를 느리게 함으로 SimpleDateFormat 형식지정한다
log4j.appender.SYSTEM.layout.DateFormat=ISO8601

#[YYYY-MM-DD HH:MM:SS, mm] 형식을 뜻한다.
log4j.appender.SYSTEM.layout.TimeZoneID=GMT-8:00

#소스코드의 위치정보를 출력한다. %C. %M(%F:%L) 의 축약형이다 / %d{HH:mm:ss} %5p (%C{2} – %M:%L) – %m%n
#log4j.appender.SYSTEM.layout.ConversionPattern=[%d] %-5p %l – %m%n
#log4j.appender.SYSTEM.layout.ConversionPattern=[%-5p] %d{HH:mm:ss} [%c] [time: %r] – %m%n
log4j.appender.SYSTEM.layout.ConversionPattern=%d{dd-MM-yy HH:mm:ss:SSS} – {%p} %c{2} Thread [%t]; %x %m%n

# 로그파일 경로.
#log4j.appender.SYSTEM.File=C:/javadev/develop/logs/mmsgw_web/
#log4j.appender.SYSTEM.File=C:/egovframeworkSample/workspace/mmsgw_web/WebContent/WEB-INF/classes/logs
log4j.appender.SYSTEM.File={catalina.home}/logs/tomcat.stdout.log

 

 

 

log4j.appender.WEB=org.apache.log4j.RollingFileAppender
log4j.appender.WEB.File=${catalina.home}/logs/tomcat.web.log
#log4j.appender.WEB.File=${catalina.home}/logs/
log4j.appender.WEB.MaxFileSize=20MB
log4j.appender.WEB.MaxBackupIndex=10
log4j.appender.WEB.layout=org.apache.log4j.PatternLayout
log4j.appender.WEB.layout.ConversionPattern=%p %t %c – %m%n
#log4j.appender.WEB.layout.ConversionPattern=[%-5p] %d{HH:mm:ss} [%c] [time: %r] – %m%n
#log4j.logger.org.apache.catalina=DEBUG, R

 

log4j.logger.org.apache.catalina.core=INFO
log4j.logger.org.apache.catalina.session=INFO
log4j.logger.org.apache.jasper.compiler=INFO

 

 

출처 : http://yaku.tistory.com/135

첫번째 참고
tomcat 튜닝 – outofmemory
http://www.javastudy.co.kr/javastudy/new_bbs/qna_view.jsp?bbs_name=lecbasicbbs&theid=364&pageNum=1

이것도 참고.
http://kr.sun.com/developers/tech_docs/wireless_web06/wireless02.html

* Sun Microsystyems의 자바 HotSpot VM은 힙을 세 개의 영역으로 나누고 있다.
힙의 세 영역은 다음과 같다:
1) Permanent space: JVM 클래스와 메소드 개체를 위해 쓰인다.
2) Old object space: 만들어진지 좀 된 개체들을 위해 쓰인다.
3) New(young) object space: 새로 생성된 개체들을 위해 쓰인다.

* Heap layout 할당에 영향을 주는 스위치들
명령행 스위치 설명
————-|——-
-Xms=[n]  최소 heap size
-Xmx=[n]  최대 heap size
-XX:PermSize=[n]  최소 perm size
-XX:MaxPermSize=[n]  최대 perm size
-XX:NewSize=[n]  최소 new size
-XX:MaxNewSize=[n]  최대 new size
-XX:SurvivorRatio=[n]  New/survivor 영역 비율
-XX:newratio=[n]  Old/new 영역 비율. HotSpot 클라이언트 VM은 8, HotSpot 서버 VM은 2.
-XX:TargetSurvivorRatio=[n]  GC동안 비울 생존자 수용 가능량 퍼센티지 (capacity percentage.) 초기값은 50%

* New Generation 메모리 할당 공식
Eden = NewSize – ((NewSize/(SurvivorRatio + 2)) * 2)
From space = (NewSize – Eden)/2
To space = (NewSize – Eden)/2
* Old Generation 메모리 할당 공식
Old = Xmx – MaxNewSize

* GC한 상태의 Heap메모리 정보출력
jdk1.4에서 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC

* 정적페이지가 많을 때
-Xms418m -Xmx418m
-XX:PermSize=1024m
-XX:MaxPermSize=1024m
-XX:NewSize=290m
-XX:MaxNewSize=290m
-XX:SurvivorRatio=3

* 동적인 페이지가 많을 때
-Xms1024m -Xmx1024m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:NewSize=800m
-XX:MaxNewSize=800m
-XX:SurvivorRatio=4

-Xms384m -Xmx384m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=3

출처 : http://gamadeus.tistory.com/145?srchid=BR1http%3A%2F%2Fgamadeus.tistory.com%2F145

두번째 참고
 이것은 동시접속 성능 개선을 위한 톰캣 튜닝 방법

è Tomcat설정 변경 : Server.xml

 

maxThreads=”1024″ minSpareThreads=”126″ maxSpareThreads=”512″

enableLookups=”false” redirectPort=”8888″ acceptCount=”100″

connectionTimeout=”5000″ disableUploadTimeout=”true” />

 

 

è WEB-INF\classes\SqlMapConfig.xml

 

lazyLoadingEnabled=”true” maxRequests=”2048″ maxSessions=”512″

maxTransactions=”1024″ useStatementNamespaces=”false” />

 

 

è JVM Heap Memory 설정 : Startup.bat

set JAVA_OPTS= -Xms512m -Xmx1024m -MaxPermSize=128m

 

 

è AdmPoolFactory.java

GenericObjectPool.Config getDefaultConfig(){

GenericObjectPool.Config config=new GenericObjectPool.Config();

config.maxIdle=32;

config.minIdle=8;

config.maxActive=128;

config.testOnBorrow=true;

return config;

}

  출처 : http://lkhstory.blogspot.com/2010/08/tomcat.html

세번째 위에것들 참고하여 본인이 작업한거.
(
작업결과 속도개선에는 위 방법이 별 효과가 없는 듯)

참고 : http://www.webpagetest.org (웹 페이지 속도테스트 사이트)

user 프로파일을 다음과 같이 변경 하였음.
이건 머 catalina.sh에 해도 되고. startup.sh에 해도 되고 본인이 하고 싶은곳에 환경설정 하면 되는 것임.
export JAVA_OPTS=”-Xms1024m -Xmx1024m -XX:MaxPermSize=128m”
뒤에 MaxPermSize 는 앞에 -XX:  이렇게 붙여줘야 됨.

본인은 apache mod_jk를 이용하여 AJP 커넥션을 사용함
– 톰캣 설정에서는 다음과 같이 minSpareThreads, maxSpareThreads, acceptCount 추가 하였음. maxThreads 는변경
<Connector port=”8110″
enableLookups=”false”
redirectPort=”8513″
debug=”0″
protocol=”AJP/1.3″
URIEncoding=”UTF-8″
maxThreads=”512″
minSpareThreads=”128″
maxSpareThreads=”256″
acceptCount=”100″
connectionTimeout=”600000″
                                disableUploadTimeout=”true” />

tomcat 관련 설정 내용 참고 : http://tomcat.apache.org/tomcat-4.1-doc/config/coyote.html

– 참고로 아파치의 workers.properties 설정 부분(이쪽은 머 기존 설정에서 건드린게 없습니다.)
worker.nipa_worker1.type=ajp13
worker.nipa_worker1.host=210.10.10.56
worker.nipa_worker1.port=8110
worker.nipa_worker1.lbfactor=1
worker.nipa_worker1.connect_timeout=5000
worker.nipa_worker1.prepost_timeout=5000
worker.nipa_worker1.socket_keepalive=True
worker.nipa_worker1.socket_timeout=10
worker.nipa_worker1.connection_pool_timeout=600

apache mod_jk 관련 설정 내용 참고 : http://tomcat.apache.org/connectors-doc/generic_howto/timeouts.html

본인의 설정이 전부 맞다고 생각하시면 안되고 저는 이렇게 했다는 것입니다.
참고만 하세요.
아직도 저는 고생중이랍니다. 앞으로도 쭈욱~~ 완벽하게 세팅하는 그날까지.
혹여나 이눔의 톰캣때문에 고생하시는 분들이 있으실까봐 부족하나마 남겨봅니다.

요래저래 찾는중에 위에 두 블로거님께 감사드립니다.

 

출처 : http://deve.tistory.com/category/apache-tomcat