On 29/01/2010 19:54, Carl wrote:
> 6-7 weeks ago, we built up some new servers and started having sudden 
> failures... Tomcat just stops with no error message, no system error 
> messages, nothing that I have been able to find so far.
> 
> To refresh everyone's memory, this is a new server, a Dell T110 with a Xeon 
> 3440 processor and 4GB memory.  I have turned off both the turbo mode and 
> hyperthreading.
> 
> The environment:
> 
> 64 bit Slackware Linux
> 
> java version "1.6.0_17"
> Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
> Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01, mixed mode)
> 
> Tomcat: apache-tomcat-6.0.20
> 
> These are the current JAVA_OPTS="-Xms1024m -Xmx1024m -XX:PermSize=368m 
> -XX:MaxPermSize=368m"
> 
> I have observed the memory usage and general performance with Java VisualVM 
> and have seen nothing strange.  I thought I was seeing GC as memory usage was 
> going up and down but in fact it was mostly people coming onto the system and 
> leaving it.  After several hours, the memory settles to a baseline of about 
> 375MB.  Forced GC never takes it below that value and the ups and downs from 
> the people coming onto and leaving the system also returns it to pretty much 
> that value.  The maximum memory used never was above 700MB for the entire day.
> 
> The server runs well, idling along at 2-5% load, except for a quick spike 
> during GC, serving jsp's, etc. at a reasonable speed.  Without warning and 
> with no tracks in any log (Tomcat or system) or to the console, Tomcat just 
> shuts down.  I can usually simply restart it as the ports used by Tomcat are 
> closed... today, I needed to run shutdown.sh before I could run startup.sh 
> (startup.sh gave no errors but would not start Tomcat until I ran shutdown.sh 
> and that process put nothing in the logs... this is the first time this has 
> happened.)  
> 
> Sometimes, the system will run for a week, sometimes for only several hours, 
> sometimes only for a few minutes.  Today, it ran until about 1:00PM and has 
> been down four times since then.
> 
> The failure (Tomcat shutting down) is not always the same place in the code 
> (I have some debugging messages going to catalina.out.)
> 
> Load does not seem to make a difference.
> 
> I have tried another sever (Dell T105, AMD processor, 6GB memory) and have 
> observed the same results.   I have run memTest86 on the T110 for about 30 
> hours and it showed nothing. 
> 
> I rebuilt the T110 with SUSE linux, Java 1.6.18 and Tomcat 6.0.24... it 
> lasted 15 minutes.  I have used the same server.xml on all the installs:
> 
> <Server port="8005" shutdown="SHUTDOWN">
> <!--APR library loader. Documentation at /docs/apr.html -->
> 
> <Listener className="org.apache.catalina.core.AprLifecycleListener" 
> SSLEngine="on" />
> 
> <!--Initialize Jasper prior to webapps are loaded. Documentation at 
> /docs/jasper-howto.html -->
> 
> <Listener className="org.apache.catalina.core.JasperListener" />
> 
> <!-- JMX Support for the Tomcat server. Documentation at 
> /docs/non-existent.html -->
> 
> <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
> 
> <Listener 
> className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
> 
> <!-- Global JNDI resources
> 
> Documentation at /docs/jndi-resources-howto.html
> 
> -->
> 
> <GlobalNamingResources>
> 
> <!-- Editable user database that can also be used by
> 
> UserDatabaseRealm to authenticate users
> 
> -->
> 
> <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" />
> 
> </GlobalNamingResources>
> 
> <!-- A "Service" is a collection of one or more "Connectors" that share
> 
> a single "Container" Note: A "Service" is not itself a "Container", 
> 
> so you may not define subcomponents such as "Valves" at this level.
> 
> Documentation at /docs/config/service.html
> 
> -->
> 
> <Service name="Catalina">
> 
> 
> <!--The connectors can use a shared executor, you can define one or more 
> named thread pools-->
> 
> <!--
> 
> <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 
> 
> maxThreads="150" minSpareThreads="4"/>
> 
> -->
> 
> 
> 
> <!-- A "Connector" represents an endpoint by which requests are received
> 
> and responses are returned. Documentation at :
> 
> Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
> 
> Java AJP Connector: /docs/config/ajp.html
> 
> APR (HTTP/AJP) Connector: /docs/apr.html
> 
> Define a non-SSL HTTP/1.1 Connector on port 8080
> 
> -->
> 
> <Connector port="8080" protocol="HTTP/1.1" 
> 
> maxHttpHeaderSize="8192"
> 
> maxThreads="600" minSpareThreads="25" maxSpareThreads="75"
> 
> enableLookups="false" redirectPort="8443" scheme="http" acceptCount="100"
> 
> connectionTimeout="20000" disableUploadTimeout="true" />
> 
> <!-- A "Connector" using the shared thread pool-->
> 
> <!--
> 
> <Connector executor="tomcatThreadPool"
> 
> port="8080" protocol="HTTP/1.1" 
> 
> connectionTimeout="20000" 
> 
> redirectPort="8443" />
> 
> --> 
> 
> <!-- Define a SSL HTTP/1.1 Connector on port 8443
> 
> This connector uses the JSSE configuration, when using APR, the 
> 
> connector should be using the OpenSSL style configuration
> 
> described in the APR documentation -->
> 
> 
> <Connector port="8443" maxHttpHeaderSize="8192"
> 
> maxThreads="600" minSpareThreads="25" maxSpareThreads="75"
> 
> enableLookups="false" disableUploadTimeout="true"
> 
> acceptCount="100" scheme="https" secure="true"
> 
> clientAuth="false" sslProtocol="TLS" SSLEnabled="true"
> 
> keystoreFile="/usr/local/certs/tomcat_keystore.ks" keystorePass="jellybean"/>
> 
> 
> <!-- Define a SSL HTTP/1.1 Connector on port 443 -->
> 
> 
> <Connector port="443" maxHttpHeaderSize="8192"
> 
> maxThreads="600" minSpareThreads="25" maxSpareThreads="75"
> 
> enableLookups="false" disableUploadTimeout="true"
> 
> acceptCount="100" scheme="https" secure="true"
> 
> clientAuth="false" sslProtocol="TLS" SSLEnabled="true"
> 
> keystoreFile="/usr/local/certs/tomcat_keystore.ks" keystorePass="jellybean"/>
> 
> 
> <!--
> 
> <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
> 
> maxThreads="150" scheme="https" secure="true"
> 
> clientAuth="false" sslProtocol="TLS" />
> 
> -->
> 
> <!-- Define an AJP 1.3 Connector on port 8009 -->
> 
> <Connector port="8009" 
> 
> enableLookups="false" redirectPort="443" protocol="AJP/1.3" />
> 
> 
> 
> <!-- An Engine represents the entry point (within Catalina) that processes
> 
> every request. The Engine implementation for Tomcat stand alone
> 
> analyzes the HTTP headers included with the request, and passes them
> 
> on to the appropriate Host (virtual host).
> 
> Documentation at /docs/config/engine.html -->
> 
> <!-- You should set jvmRoute to support load-balancing via AJP ie :
> 
> <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> 
> 
> --> 
> 
> <Engine name="Catalina" defaultHost="localhost">
> 
> <!--For clustering, please take a look at documentation at:
> 
> /docs/cluster-howto.html (simple how to)
> 
> /docs/config/cluster.html (reference documentation) -->
> 
> <!--
> 
> <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
> 
> --> 
> 
> <!-- The request dumper valve dumps useful debugging information about
> 
> the request and response data received and sent by Tomcat.
> 
> Documentation at: /docs/config/valve.html -->
> 
> <!--
> 
> <Valve className="org.apache.catalina.valves.RequestDumperValve"/>
> 
> -->
> 
> <!-- This Realm uses the UserDatabase configured in the global JNDI
> 
> resources under the key "UserDatabase". Any edits
> 
> that are performed against this UserDatabase are immediately
> 
> available for use by the Realm. -->
> 
> <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
> 
> resourceName="UserDatabase"/>
> 
> <!-- Define the default virtual host
> 
> Note: XML Schema validation will not work with Xerces 2.2.
> 
> -->
> 
> <Host name="localhost" appBase="webapps"
> 
> unpackWARs="true" autoDeploy="true" deployOnStartup="true"
> 
> xmlValidation="false" xmlNamespaceAware="false">
> 
> <!-- SingleSignOn valve, share authentication between web applications
> 
> Documentation at: /docs/config/valve.html -->
> 
> <!--
> 
> <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
> 
> -->
> 
> <!-- Access log processes all example.
> 
> Documentation at: /docs/config/valve.html -->
> 
> <!--
> 
> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
> 
> prefix="localhost_access_log." suffix=".txt" pattern="common" 
> resolveHosts="false"/>
> 
> -->
> 
> </Host>
> 
> </Engine>
> 
> </Service>
> 
> </Server>
> 
> When Tomcat shuts down, the memory that it was using seems to still be held 
> (as seen from top) but it is nowhere near the machine physical memory.
> 
> The application has been running on an older server (Dell 600SC, 32 bit 
> Slackware, 2GB memory) for several years and, while the application will 
> throw exceptions now and then, it never crashed.  This lead me to believe the 
> problem had something to do with the 64 bit JVM but, with without seeing 
> errors anywhere, I can't be certain and don't know what I can do about it 
> except go back to 32 bit.

Given the circumstances, that seems like a reasonable next step.

> Anyone have any ideas how I might track this problem down?

It sounds like it is going to be trial an error.

The closest I have seen to this was a web application that hung on
Tomcat start. It appeared to be one or more gc bugs in the 64-bit JVM. I
had one set options gc options that worked on Solaris and failed on
linux and another set that worked on linux but failed on Solaris. I
never did find a set that worked on both.

When Tomcat shuts down, I assume there is no java process left running.
i.e. the process dies rather than hangs.

Mark



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to