Re: Tomcat 7 parallel deployment and PermGen Heap Space
@Chuck -- The moment I remove context xml (xyz##001.xml) file, tomcat automagically removes the corresponding dir from webapps. So that's not an issue. In my log file i see the following message INFO | jvm 1| 2011/07/19 16:11:07 | Jul 19, 2011 4:11:07 PM org.apache.catalina.startup.HostConfig checkResources INFO | jvm 1| 2011/07/19 16:11:07 | INFO: Undeploying context [##001] INFO | jvm 1| 2011/07/19 16:11:07 | Jul 19, 2011 4:11:07 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc INFO | jvm 1| 2011/07/19 16:11:07 | SEVERE: The web application [##001] registered the JDBC driver [oracle.jdbc.driver.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. Currently i am using commons-dbcp connection pooling. I will switch to Tomcat-JDBC connection pool and see if memory leak message goes away or not. I will update this thread with my findings. Thanks all you guys with your suggestion... On Tue, Jul 19, 2011 at 5:33 PM, Caldarale, Charles R wrote: >> From: Monsieur fsfu [mailto:monsieurf...@gmail.com] >> Subject: Tomcat 7 parallel deployment and PermGen Heap Space > >> 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. > > First, verify that the first instance really has been undeployed. > > Second, unless you insure that at least two full GCs happen after undeploying > the first .war file, class unloading will not occur. Even then, it's a bit > of guess whether or not the JVM will choose to unload classes in the absence > of pressure on PermGen. > > Regardless, as others suggested, running some heap analysis tool will find > out if you've got a leak built into your webapp, or if the JVM has simply > decided not to bother with class unloading yet. > > - Chuck > > > THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY > MATERIAL and is thus for use only by the intended recipient. If you received > this in error, please contact the sender and delete the e-mail and its > attachments from all computers. > > > - > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > > - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Tomcat 7 parallel deployment and PermGen Heap Space
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 <<< JNDI Detail >>> #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 c