hi, all

I found my tomcat refusing to work this morning.
I tried jstack to get some info, and then I found a lot of thread call
stack like:

"http-8082-154" daemon prio=10 tid=0x00007f711c21f800 nid=0x5b0a waiting on
> condition [0x00007f70dc887000]
>    java.lang.Thread.State: TIMED_WAITING (sleeping)
>     at java.lang.Thread.sleep(Native Method)
>     at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:132)
>     at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>     at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
>     at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>     at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
>     at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
>     at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
>     at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
>     at java.lang.Thread.run(Thread.java:662)
>


Actually, when I used grep to get more clue
# grep -B5 -A7 org.apache.catalina.valves.ErrorReportValve.invoke 14446.dump

I got:

Dump File: 14446.dump.1388636053
> execute external commands: ^[[01;31mgrep -B5 -A7
> org.apache.catalina.valves.ErrorReportValve.invoke^[[00m
> "http-8082-200" daemon prio=10 tid=0x00007f711c14b000 nid=0x6a52 waiting
> on condition [0x00007f70d9a59000]
>    java.lang.Thread.State: TIMED_WAITING (sleeping)
>     at java.lang.Thread.sleep(Native Method)
>     at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:132)
>     at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>     at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
>     at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>     at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
>     at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
>     at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
>     at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
>     at java.lang.Thread.run(Thread.java:662)
>
> "http-8082-199" daemon prio=10 tid=0x00007f711c148800 nid=0x69f3 waiting
> on condition [0x00007f70d9b5a000]
>    java.lang.Thread.State: TIMED_WAITING (sleeping)
>     at java.lang.Thread.sleep(Native Method)
>     at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:132)
>     at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>     at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
>     at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>     at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
>     at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
>     at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
>     at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
>     at java.lang.Thread.run(Thread.java:662)
>
> "http-8082-198" daemon prio=10 tid=0x00007f711c146000 nid=0x6992 waiting
> on condition [0x00007f70d9c5b000]
>    java.lang.Thread.State: TIMED_WAITING (sleeping)
>     at java.lang.Thread.sleep(Native Method)
>     at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:132)
>     at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>     at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
>     at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>     at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
>     at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
>     at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
>     at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
>     at java.lang.Thread.run(Thread.java:662)
> ... ...
>
> "http-8082-2" daemon prio=10 tid=0x00007f711c002800 nid=0x38a4 waiting on
> condition [0x00007f7124b7a000]
>    java.lang.Thread.State: TIMED_WAITING (sleeping)
>     at java.lang.Thread.sleep(Native Method)
>     at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:132)
>     at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>     at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
>     at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>     at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
>     at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
>     at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
>     at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
>     at java.lang.Thread.run(Thread.java:662)
>
> "http-8082-1" daemon prio=10 tid=0x00007f711c001000 nid=0x38a2 waiting on
> condition [0x00007f71099f8000]
>    java.lang.Thread.State: TIMED_WAITING (sleeping)
>     at java.lang.Thread.sleep(Native Method)
>     at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:132)
>     at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>     at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
>     at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>     at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
>     at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
>     at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
>     at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
>     at java.lang.Thread.run(Thread.java:662)
>

It seems all of the 200 JIoEndpoint$Worker threads had been occupied. and I
guess that's why tomcat refuse to serve any incoming request.

After I got a copy of the source of my tomcat. I found
$ grep -B3 -A8 context.getPaused\(\)
/home/benimaur/workspace/eclipse/tomcat/src/org/apache/catalina/core/StandardContextValve.java

> 126-
> 127-        // Wait if we are reloading
> 128-        boolean reloaded = false;
> 129:        while (context.getPaused()) {
> 130-            reloaded = true;
> 131-            try {
> 132-                Thread.sleep(1000);
> 133-            } catch (InterruptedException e) {
> 134-                ;
> 135-            }
> 136-        }
> 137-
>

It seems context had been set to reload state at some time, but I can't
figure out under what  circumstance would put tomcat into such state.
does any one here could give me more clue? thanks in advance.

======================================

the version of my tomcat is 6.0.37

# java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)

# uname -a
Linux his-web01 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012
x86_64 x86_64 x86_64 GNU/Linux

Reply via email to