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: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org