Hi,
I was checking out the parallel deployment feature of tomcat 7 and
encountered an issue with PermGen space of JVM. After the initial
deployment (xyz##001.war), PermGen space reaches ~120mb of space and
after parallel deployment (xyz##002.war) it almost doubles (~205mb)
which make sense. Now if i remove the old war file (xyz##001.war) by
removing xyz##001.xml
($catalina_home/conf/Catalina/locahost/xyz##001.xml), PermGen space
doesn't come down. I have waited upto 4 hrs but no luck. Once i
restart the JVM then only it comes down to ~120 range. Is anybody else
faced this issue? I would hate to restart the JVM after deployment
which totally defeats the purpose of parallel deployment.
Setup details:
OS --> RHEL - 5.5 (64 Bit)
Tomcat --> 7.0.14
Java --> jre1.6.0_25 (64 bit)
Tomcat APR --> apr-1.4.5 (64 bit)
java service wrapper --> 3.5.9 (64 bit)
Attached are server.xml and wrapper.conf files.
Thanks in advance
Kapil
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="tomcat7shutdown">
<Listener className="org.apache.catalina.security.SecurityListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener"
SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener
className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener
className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener
className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<!-- Global JNDI resources -->
<GlobalNamingResources>
<Environment name="config/envType" override="false" type="java.lang.String"
value="DEV2"/>
<Environment name="config/envLocation" override="false"
type="java.lang.String" value="SD"/>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
<<<<<<< JNDI Detail >>>>>>>
</GlobalNamingResources>
<Service name="Catalina">
<Connector protocol="org.apache.coyote.http11.Http11AprProtocol"
port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="15" maxSpareThreads="50"
enableLookups="false" disableUploadTimeout="true"
maxPostSize="8388608"
acceptCount="100" connectionTimeout="20000" />
<Connector protocol="org.apache.coyote.http11.Http11AprProtocol"
port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="15" maxSpareThreads="50"
enableLookups="false" disableUploadTimeout="true"
maxPostSize="8388608"
acceptCount="100" connectionTimeout="20000"
scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
SSLEnabled="true"
SSLCertificateFile="${catalina.base}/conf/default.cert"
SSLCertificateKeyFile="${catalina.base}/conf/default.key" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="access" suffix=".log"
rotatable="false"
pattern="%h %l %u %t %r %s %b %m %T %I" resolveHosts="false"/>
</Host>
</Engine>
</Service>
</Server>
#encoding=UTF-8
#********************************************************************
# Wrapper Java Properties
#********************************************************************
# Java Application
# Locate the java binary on the system PATH:
wrapper.java.command=/local/mnt/java/jre1.6.0_25/bin/java
# Tell the Wrapper to log the full generated Java command line.
#wrapper.java.command.loglevel=INFO
# Java Main class. This class must implement the WrapperListener interface
# or guarantee that the WrapperManager class is initialized. Helper
# classes are provided to do this for you. See the Integration section
# of the documentation for details.
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperStartStopApp
#wrapper.java.mainclass=org.tanukisoftware.wrapper.test.Main
# Java Classpath (include wrapper.jar) Add class path elements as
# needed starting from 1
wrapper.java.classpath.1=../lib/wrappertest.jar
wrapper.java.classpath.2=../lib/wrapper.jar
wrapper.java.classpath.3=../bin/tomcat-juli.jar
wrapper.java.classpath.4=../bin/bootstrap.jar
# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=../lib
wrapper.java.library.path.2=../tc-native/apr-1.4.5-64bit
wrapper.java.library.path.3=../tc-native/lib
# Java Bits. On applicable platforms, tells the JVM to run in 32 or 64-bit
mode.
wrapper.java.additional.auto_bits=TRUE
# Java Additional Parameters
wrapper.java.additional.1=-Dcatalina.base=/local/mnt/tomcat-7.0.14/tomcat7-poc
wrapper.java.additional.2=-Dcatalina.home=/local/mnt/tomcat-7.0.14/tomcat7-poc
wrapper.java.additional.3=-Xms1024m
wrapper.java.additional.4=-Xmx1024m
wrapper.java.additional.5=-XX:NewSize=448m
wrapper.java.additional.6=-XX:MaxNewSize=448m
wrapper.java.additional.7=-XX:SurvivorRatio=6
wrapper.java.additional.8=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
wrapper.java.additional.9=-Djava.util.logging.config.file=../conf/logging.properties
wrapper.java.additional.10=-Dcom.sun.management.jmxremote
wrapper.java.additional.11=-Dcom.sun.management.jmxremote.port=8004
wrapper.java.additional.12=-Dcom.sun.management.jmxremote.ssl=false
wrapper.java.additional.13=-Dcom.sun.management.jmxremote.authenticate=true
wrapper.java.additional.14=-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password
wrapper.java.additional.15=-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access
wrapper.java.additional.16=-Dorg.tanukisoftware.wrapper.WrapperManager.mbean=true
wrapper.java.additional.17=-Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true
wrapper.java.additional.18=-Dorg.apache.catalina.security.SecurityListener.UMASK=0027
wrapper.java.additional.19=-Dserver.name=tomcat7-poc1
wrapper.java.additional.20=-Djava.endorsed.dirs=../endorsed
wrapper.java.additional.21=-Djava.awt.headless=true
wrapper.java.additional.22=-server
wrapper.java.additional.23=-Djava.io.tmpdir=../temp
wrapper.java.additional.24=-XX:MaxPermSize=256m
wrapper.java.additional.25=-XX:+UseConcMarkSweepGC
wrapper.java.additional.26=-XX:+CMSPermGenSweepingEnabled
wrapper.java.additional.26=-XX:+CMSClassUnloadingEnabled
# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=300
# Maximum Java Heap Size (in MB)
#wrapper.java.maxmemory=640
# Application parameters. Add parameters as needed starting from 1
wrapper.app.parameter.1=org.apache.catalina.startup.Bootstrap
wrapper.app.parameter.2=1
wrapper.app.parameter.3=start
wrapper.app.parameter.4=org.apache.catalina.startup.Bootstrap
wrapper.app.parameter.5=true
wrapper.app.parameter.6=1
wrapper.app.parameter.7=stop
#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Enables Debug output from the Wrapper.
# wrapper.debug=TRUE
# Format of output for the console. (See docs for formats)
wrapper.console.format=PTM
# Log Level for console output. (See docs for log levels)
wrapper.console.loglevel=INFO
# Log file to use for wrapper output logging.
wrapper.logfile=../logs/wrapper.log
# Format of output for the log file. (See docs for formats)
wrapper.logfile.format=LPTM
# Log Level for log file output. (See docs for log levels)
wrapper.logfile.loglevel=INFO
# Maximum size that the log file will be allowed to grow to before
# the log is rolled. Size is specified in bytes. The default value
# of 0, disables log rolling. May abbreviate with the 'k' (kb) or
# 'm' (mb) suffix. For example: 10m = 10 megabytes.
#wrapper.logfile.maxsize=0
# Maximum number of rolled log files which will be allowed before old
# files are deleted. The default value of 0 implies no limit.
#wrapper.logfile.maxfiles=0
# Log Level for sys/event log output. (See docs for log levels)
wrapper.syslog.loglevel=NONE
#********************************************************************
# Wrapper General Properties
#********************************************************************
# Allow for the use of non-contiguous numbered properties
wrapper.ignore_sequence_gaps=TRUE
# Title to use when running as a console
wrapper.console.title=tomcat7-poc Application
#********************************************************************
# Wrapper JVM Checks
#********************************************************************
# Out Of Memory detection.
# (Ignore output from dumping the configuration to the console.)
wrapper.filter.trigger.999=wrapper.filter.trigger.*java.lang.OutOfMemoryError
wrapper.filter.allow_wildcards.999=TRUE
wrapper.filter.action.999=NONE
# (Simple match)
wrapper.filter.trigger.1000=java.lang.OutOfMemoryError
# (Only match text in stack traces if -XX:+PrintClassHistogram is being used.)
#wrapper.filter.trigger.1000=Exception in thread "*" java.lang.OutOfMemoryError
#wrapper.filter.allow_wildcards.1000=TRUE
wrapper.filter.action.1000=RESTART
wrapper.filter.message.1000=The JVM has run out of memory.
###############################
## LOG EVENTS // ACTIONS
###############################
wrapper.filter.trigger.1=java.lang.OutOfMemoryError
wrapper.filter.action.1=RESTART
wrapper.filter.trigger.2=SEVERE: Could not synchronize
wrapper.filter.action.2=RESTART
wrapper.filter.trigger.3=SEVERE: Cannot create PoolableConnectionFactory
wrapper.filter.action.3=RESTART
wrapper.filter.trigger.4=SEVERE: Io exception: The Network Adapter
wrapper.filter.action.4=RESTART
wrapper.filter.trigger.5=FATAL
wrapper.filter.action.5=RESTART
#********************************************************************
# Wrapper Windows Properties
#********************************************************************
# Title to use when running as a console
wrapper.console.title=tomcat7-poc
# Name of the service
wrapper.name=tomcat7-poc
# Display name of the service
wrapper.displayname=tomcat7-poc Application
# Description of the service
wrapper.description=tomcat7-poc Application Description
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]