Re: Tomcat 7 parallel deployment and PermGen Heap Space

2011-07-19 Thread Monsieur fsfu
@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

2011-07-19 Thread Monsieur fsfu
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