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

Reply via email to