I really appreciate your input Leon. On Wed, 2009-01-28 at 11:07 +0100, Leon Rosenberg wrote:
> > "RMI TCP Connection(42)-173.x.x.x" - Thread t...@112 > > java.lang.Thread.State: RUNNABLE > > reading from socket, usually not a problem. > I thought so. Thanks. > > "http-8081-35" - Thread t...@71 > > java.lang.Thread.State: RUNNABLE > > at java.lang.String.equals(String.java:1018) > > at > > com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:554) > > at > > org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:44) > This one actually looks like a problem, was the server under load as > you created the dump, or did you removed the load first? No, the server was not under load at all. And I took various thread dumps at random intervals, and they thread was still there (same thread number). Maybe there is an infinite loop, but I don't know why it works for a random amount of time, and then freezes. > If there were no external requests to the server, you most probably > have an infinite loop somewhere (how stable is xfire anyway?) or you > have a really really really large xml file to parse. That's a good question. I have no experience with XFire. Would there be a way to know which XML file it's parsing? > > > "http-8081-31" - Thread t...@67 > > java.lang.Thread.State: RUNNABLE > > at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl > > $PrologDriver.next(XMLDocumentScannerImpl.java:930) > > at > > com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) > > at > > com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) > > at > > com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:548) > > at > > org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:44) > > at > > org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131) > > at > > org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64) > > at > > org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38) > > at > > org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:304) > > at > > org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129) > > at > > org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116) > > > > note that the XFire path is almost identical. > Personally I neved managed to catch healthy code in something like > String.equals(), but it may be possible, even imho unlikeable. > The dump looks healthy, but is it the dump from the tomcat 5.5 or tomcat 6? > Because if tomcat 6 is the problem and the dump is from tomcat 5 its useless > :-) > This was the heap dump from Tomcat 6. > you need more research :-) For now it looks like your first tomcat is > waiting for the second tomcat which just can't handle the requests as > fast as its expected. You may want to check configuration options of > both (threads in the connector etc). If the threadMax would be too low in the connector, wouldn't the "freeze" be over once there are free connections? And also, how can a small threadMax make a thread hang? For example the one that is trying to read an XML file. > Also the heap dump of the second tomcat would be useful (if this one > is from first). > And a thread dump shortly after the traffic has gone (for example kill > first tomcat, wait 1 minute, make thread dump). > Did this, see the output (I removed the RMI threads): "TP-Monitor" - Thread t...@28 java.lang.Thread.State: TIMED_WAITING on org.apache.tomcat.util.threads.threadpool$monitorrunna...@498364 at java.lang.Object.wait(Native Method) at org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable.run(ThreadPool.java:565) at java.lang.Thread.run(Thread.java:619) Locked ownable synchronizers: - None "TP-Processor4" - Thread t...@27 java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384) - locked java.net.sockssocketi...@134af1 at java.net.ServerSocket.implAccept(ServerSocket.java:453) at java.net.ServerSocket.accept(ServerSocket.java:421) at org.apache.jk.common.ChannelSocket.accept(ChannelSocket.java:306) at org.apache.jk.common.ChannelSocket.acceptConnections(ChannelSocket.java:660) at org.apache.jk.common.ChannelSocket$SocketAcceptor.runIt(ChannelSocket.java:870) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) at java.lang.Thread.run(Thread.java:619) Locked ownable synchronizers: - None "TP-Processor3" - Thread t...@26 java.lang.Thread.State: WAITING on org.apache.tomcat.util.threads.threadpool$controlrunna...@514577 at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:485) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662) at java.lang.Thread.run(Thread.java:619) Locked ownable synchronizers: - None "TP-Processor2" - Thread t...@25 java.lang.Thread.State: WAITING on org.apache.tomcat.util.threads.threadpool$controlrunna...@1a79b48 at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:485) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662) at java.lang.Thread.run(Thread.java:619) Locked ownable synchronizers: - None "TP-Processor1" - Thread t...@24 java.lang.Thread.State: WAITING on org.apache.tomcat.util.threads.threadpool$controlrunna...@c3a53b at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:485) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662) at java.lang.Thread.run(Thread.java:619) Locked ownable synchronizers: - None "http-8081-Acceptor-0" - Thread t...@23 java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384) - locked java.net.sockssocketi...@9d478b at java.net.ServerSocket.implAccept(ServerSocket.java:453) at java.net.ServerSocket.accept(ServerSocket.java:421) at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61) at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:310) at java.lang.Thread.run(Thread.java:619) Locked ownable synchronizers: - None "ContainerBackgroundProcessor[StandardEngine[Catalina]]" - Thread t...@22 java.lang.Thread.State: TIMED_WAITING at java.lang.Thread.sleep(Native Method) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1579) at java.lang.Thread.run(Thread.java:619) Locked ownable synchronizers: - None "Monitor Runner" - Thread t...@21 java.lang.Thread.State: TIMED_WAITING at java.lang.Thread.sleep(Native Method) at com.icesoft.util.MonitorRunner$1.run(MonitorRunner.java:20) Locked ownable synchronizers: - None "pool-1-thread-1" - Thread t...@20 java.lang.Thread.State: TIMED_WAITING on java.util.concurrent.locks.abstractqueuedsynchronizer$conditionobj...@94c5e7 at sun.misc.Unsafe.park(Native Method) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1963) at java.util.concurrent.DelayQueue.take(DelayQueue.java:164) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:582) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:575) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:946) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:906) at java.lang.Thread.run(Thread.java:619) Locked ownable synchronizers: - None "Store org.hibernate.cache.StandardQueryCache Spool Thread" - Thread t...@18 java.lang.Thread.State: TIMED_WAITING at java.lang.Thread.sleep(Native Method) at net.sf.ehcache.store.DiskStore.spoolAndExpiryThreadMain(DiskStore.java:563) at net.sf.ehcache.store.DiskStore.access$800(DiskStore.java:64) at net.sf.ehcache.store.DiskStore$SpoolAndExpiryThread.run(DiskStore.java:1047) Locked ownable synchronizers: - None "Store org.hibernate.cache.UpdateTimestampsCache Spool Thread" - Thread t...@17 java.lang.Thread.State: TIMED_WAITING at java.lang.Thread.sleep(Native Method) at net.sf.ehcache.store.DiskStore.spoolAndExpiryThreadMain(DiskStore.java:563) at net.sf.ehcache.store.DiskStore.access$800(DiskStore.java:64) at net.sf.ehcache.store.DiskStore$SpoolAndExpiryThread.run(DiskStore.java:1047) Locked ownable synchronizers: - None "HSQLDB Timer @55d1b4" - Thread t...@16 java.lang.Thread.State: TIMED_WAITING on org.hsqldb.lib.hsqltimer$taskqu...@14cff90 at java.lang.Object.wait(Native Method) at org.hsqldb.lib.HsqlTimer$TaskQueue.park(Unknown Source) at org.hsqldb.lib.HsqlTimer.nextTask(Unknown Source) at org.hsqldb.lib.HsqlTimer$TaskRunner.run(Unknown Source) at java.lang.Thread.run(Thread.java:619) Locked ownable synchronizers: - None "Timer-0" - Thread t...@15 java.lang.Thread.State: WAITING on java.util.taskqu...@1e6661 at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:485) at java.util.TimerThread.mainLoop(Timer.java:483) at java.util.TimerThread.run(Timer.java:462) Locked ownable synchronizers: - None "Session Monitor" - Thread t...@14 java.lang.Thread.State: TIMED_WAITING at java.lang.Thread.sleep(Native Method) at com.icesoft.faces.webapp.http.servlet.SessionDispatcher$Listener$1.run(SessionDispatcher.java:208) Locked ownable synchronizers: - None "Store userCache Spool Thread" - Thread t...@13 java.lang.Thread.State: TIMED_WAITING at java.lang.Thread.sleep(Native Method) at net.sf.ehcache.store.DiskStore.spoolAndExpiryThreadMain(DiskStore.java:573) at net.sf.ehcache.store.DiskStore.access$800(DiskStore.java:65) at net.sf.ehcache.store.DiskStore$SpoolAndExpiryThread.run(DiskStore.java:1057) Locked ownable synchronizers: - None "Signal Dispatcher" - Thread t...@4 java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Finalizer" - Thread t...@3 java.lang.Thread.State: WAITING on java.lang.ref.referencequeue$l...@1d36f77 at java.lang.Object.wait(Native Method) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) Locked ownable synchronizers: - None "Reference Handler" - Thread t...@2 java.lang.Thread.State: WAITING on java.lang.ref.reference$l...@3b1799 at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:485) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) Locked ownable synchronizers: - None "main" - Thread t...@1 java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384) - locked java.net.sockssocketi...@735aa1 at java.net.ServerSocket.implAccept(ServerSocket.java:453) at java.net.ServerSocket.accept(ServerSocket.java:421) at org.apache.catalina.core.StandardServer.await(StandardServer.java:389) at org.apache.catalina.startup.Catalina.await(Catalina.java:642) at org.apache.catalina.startup.Catalina.start(Catalina.java:602) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) Locked ownable synchronizers: - None --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org