Background:
We have a moderately high traffic web application (between 8 to 21 million
hits/day) running Apache to serve static content (also to load balance and
create a DMZ) and Weblogic to serve dynamic content (Struts 1.1 based Java web
application).
We are trying to replace Weblogic with Tomcat and we have ported our code to
work with Tomcat. All works well in Tomcat in the DEV, QA, and STAGING
environment as long as there is no real load.
The Issue - Load Testing:
In our staging environment for load testing, when we run the load test using
525 concurrent users, the app doesn't perform at all. The CPU usage (on Apache
and Tomcat Servers) hovers between 7% to 8%. The database server CPU usage is
also between 4 and 5%.
Setup for Load Testing:
We have setup 2 apache web servers (4 Quad Processors i.e. 16 CPUs each), 2
Tomcat (version 6.0.29) servers (4 Quad Processors i.e. 16 CPUs each). Each
server has 32 Gb ram. We are using AJP 1.3 to connect Tomcat and Apache.
Mentioned below is the version information:
Apache Version 2.2.14 (with mod_jk module)
Tomcat: 6.0.29
Database: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bits
Connection Pool: DBCP.
Mentioned below are connector settings in conf/server.xml:
<Connector
address="stagingTCserver01"
backlog="300"
connectionTimeout="60000"
enableLookups="false"
maxPostSize="2097152"
maxSpareThreads="10"
maxThreads="30"
minSpareThreads="5"
port="8006"
protocol="AJP/1.3"
tcpNoDelay="true"
/>
Mentioned below are the settings for JNDI resource configured in
conf/context.xml:
<Resource
name="jdbc/onlinedb"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@192.168.12.10:1521:WEBDB"
initialSize="1"
maxActive="30"
minIdle="1"
maxIdle="5"
maxWait="300000"
poolPreparedStatements="true"
maxOpenPreparedStatements="300"
validationQuery="SELECT 1 FROM BB_DUAL"
testOnBorrow="true"
validationInterval="10000"
testWhileIdle="true"
/>
JVM Parameters:
-Xms512m -Xmx2048m
-XX:PermSize=128m -XX:MaxPermSize=256m
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/WL2TC/app/
-verbose:gc -Xloggc:/logs/WL2TC/app/WL2TC_1-gc.log
It must be noted that Weblogic setup performs very well using similar settings.
Garbage Collection: While the load test is running, Garbage collection works
just fine i.e. Young GC occurring every 2-3 minutes and takes less than half a
second. Full GC occurs every hour and takes a little over 2 seconds.
Any tips/pointers will be greatly appreciated.
Talha.