WEB开发网
开发学院软件开发Java 用Java代码来触发生成ThreadDump 阅读

用Java代码来触发生成ThreadDump

 2009-09-23 00:00:00 来源:WEB开发网   
核心提示: 然后在一个JSP里或者Servlet中任意调用即可:<%=new ThreadDumpBuilder().build() %>我用的 Oracle JRocket ReamTime 的JVM跑的空的Tomcat, 输出内容如下: Thread[(GCMainThread),5,sys

然后在一个JSP里或者Servlet中任意调用即可:

<%=new ThreadDumpBuilder().build() %>

我用的 Oracle JRocket ReamTime 的JVM跑的空的Tomcat, 输出内容如下:

  Thread[(GC Main Thread),5,system] 
Thread[Main Thread,5,main] 
 java.net.PlainSocketImpl.socketAccept(Native Method) 
 java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384) 
 java.net.ServerSocket.implAccept(ServerSocket.java:453) 
 java.net.ServerSocket.accept(ServerSocket.java:421) 
 org.apache.catalina.core.StandardServer.await(StandardServer.java:389) 
 org.apache.catalina.startup.Catalina.await(Catalina.java:630) 
 org.apache.catalina.startup.Catalina.start(Catalina.java:590) 
 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
 java.lang.reflect.Method.invoke(Method.java:597) 
 org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) 
 org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 
Thread[TP-Processor1,5,main] 
 java.lang.Object.wait(Native Method) 
 java.lang.Object.wait(Object.java:485) 
 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:658) 
 java.lang.Thread.run(Thread.java:619) 
Thread[TP-Processor3,5,main] 
 java.lang.Object.wait(Native Method) 
 java.lang.Object.wait(Object.java:485) 
 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:658) 
 java.lang.Thread.run(Thread.java:619) 
Thread[(VM Periodic Task),10,system] 
Thread[ContainerBackgroundProcessor[StandardEngine[Catalina]],5,main] 
 java.lang.Thread.sleep(Native Method) 
 org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1579) 
 java.lang.Thread.run(Thread.java:619) 
Thread[Finalizer,8,system] 
 java.lang.Thread.run(Thread.java:619) 
Thread[TP-Processor2,5,main] 
 java.lang.Object.wait(Native Method) 
 java.lang.Object.wait(Object.java:485) 
 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:658) 
 java.lang.Thread.run(Thread.java:619) 
Thread[Reference Handler,10,system] 
 java.lang.ref.Reference.waitForActivatedQueue(Native Method) 
 java.lang.ref.Reference.access$100(Reference.java:11) 
 java.lang.ref.Reference$ReferenceHandler.run(Reference.java:79) 
Thread[(Code Generation Thread 1),5,system] 
Thread[TP-Processor4,5,main] 
 java.net.PlainSocketImpl.socketAccept(Native Method) 
 java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384) 
 java.net.ServerSocket.implAccept(ServerSocket.java:453) 
 java.net.ServerSocket.accept(ServerSocket.java:421) 
 org.apache.jk.common.ChannelSocket.accept(ChannelSocket.java:306) 
 org.apache.jk.common.ChannelSocket.acceptConnections(ChannelSocket.java:660) 
 org.apache.jk.common.ChannelSocket$SocketAcceptor.runIt(ChannelSocket.java:870) 
 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:686) 
 java.lang.Thread.run(Thread.java:619) 
Thread[http-8080-Acceptor-0,5,main] 
 java.net.PlainSocketImpl.socketAccept(Native Method) 
 java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384) 
 java.net.ServerSocket.implAccept(ServerSocket.java:453) 
 java.net.ServerSocket.accept(ServerSocket.java:421) 
 org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61) 
 org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:310) 
 java.lang.Thread.run(Thread.java:619) 
Thread[(Signal Handler),5,system] 
Thread[(Sensor Event Thread),5,system] 
Thread[TP-Monitor,5,main] 
 java.lang.Object.wait(Native Method) 
 org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable.run(ThreadPool.java:561) 
 java.lang.Thread.run(Thread.java:619) 
Thread[(Attach Listener),5,system] 
Thread[(Code Optimization Thread 1),5,system] 

对比用 Ctrl + Break 做出的GC, 显然因为有安全性的限制, 输出的日志信息比上面的方式详细的多, 因此这仍然是推荐做法:

===== FULL THREAD DUMP ===============
Sun Aug 16 15:37:48 2009
BEA JRockit(R) R27.6.3-40_o-112056-1.6.0_11-20090318-2104-windows-ia32 
"Main Thread" id=1 idx=0x4 tid=1760 prio=5 alive, in native
    at java/net/PlainSocketImpl.socketAccept(Ljava/net/SocketImpl;)V(Native Method)
    at java/net/PlainSocketImpl.accept(PlainSocketImpl.java:384)
    ^-- Holding lock: java/net/SocksSocketImpl@0x017CA398[biased lock]
    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:630)
    at org/apache/catalina/startup/Catalina.start(Catalina.java:590)
    at jrockit/vm/RNI.c2java(IIIII)V(Native Method)
    at jrockit/vm/Reflect.invokeMethod(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Native
Method)
    at sun/reflect/NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljav
a/lang/Object;(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)
    at jrockit/vm/RNI.c2java(IIIII)V(Native Method)
    -- end of trace 
"(Signal Handler)" id=2 idx=0x8 tid=1368 prio=5 alive, in native, daemon 
"(GC Main Thread)" id=3 idx=0xc tid=1912 prio=5 alive, in native, native_waiting, daemon 
"(GC Worker Thread 1)" id=? idx=0x10 tid=2760 prio=5 alive, in native, daemon 
"(GC Worker Thread 2)" id=? idx=0x14 tid=1432 prio=5 alive, in native, daemon 
"(Code Generation Thread 1)" id=4 idx=0x18 tid=2104 prio=5 alive, in native, native_waiting, daemon 
"(Code Optimization Thread 1)" id=5 idx=0x1c tid=1136 prio=5 alive, in native, native_waiting, daemon 
"(VM Periodic Task)" id=6 idx=0x20 tid=2184 prio=10 alive, in native, daemon 
"(Attach Listener)" id=7 idx=0x24 tid=2464 prio=5 alive, in native, daemon 
"Finalizer" id=8 idx=0x28 tid=2668 prio=8 alive, in native, native_waiting, daemon
    at jrockit/memory/Finalizer.waitForFinalizees([Ljava/lang/Object;)I(Native Method)
    at jrockit/memory/Finalizer.access$500(Finalizer.java:12)
    at jrockit/memory/Finalizer$4.run(Finalizer.java:159)
    at java/lang/Thread.run(Thread.java:619)
    at jrockit/vm/RNI.c2java(IIIII)V(Native Method)
    -- end of trace 
"Reference Handler" id=9 idx=0x2c tid=772 prio=10 alive, in native, native_waiting, daemon
    at java/lang/ref/Reference.waitForActivatedQueue()Ljava/lang/ref/Reference;(Native Method)
    at java/lang/ref/Reference.access$100(Reference.java:11)
    at java/lang/ref/Reference$ReferenceHandler.run(Reference.java:79)
    at jrockit/vm/RNI.c2java(IIIII)V(Native Method)
    -- end of trace 
"(Sensor Event Thread)" id=10 idx=0x30 tid=280 prio=5 alive, in native, daemon 
"ContainerBackgroundProcessor[StandardEngine[Catalina]]" id=12 idx=0x34 tid=3616 prio=5 alive, in native, sleeping, nati
ve_waiting, daemon
    at java/lang/Thread.sleep(J)V(Native Method)
    at org/apache/catalina/core/ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1579)
    at java/lang/Thread.run(Thread.java:619)
    at jrockit/vm/RNI.c2java(IIIII)V(Native Method)
    -- end of trace 
"http-8080-Acceptor-0" id=13 idx=0x38 tid=2780 prio=5 alive, in native, daemon
    at java/net/PlainSocketImpl.socketAccept(Ljava/net/SocketImpl;)V(Native Method)
    at java/net/PlainSocketImpl.accept(PlainSocketImpl.java:384)
    ^-- Holding lock: java/net/SocksSocketImpl@0x031F98D0[biased lock]
    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)
    at jrockit/vm/RNI.c2java(IIIII)V(Native Method)
    -- end of trace 
"TP-Processor1" id=14 idx=0x3c tid=3184 prio=5 alive, in native, waiting, daemon
    -- Waiting for notification on: org/apache/tomcat/util/threads/ThreadPool$ControlRunnable@0x0179EB28[fat lock]
    at jrockit/vm/Threads.waitForNotifySignal(JLjava/lang/Object;)Z(Native Method)
    at java/lang/Object.wait(J)V(Native Method)
    at java/lang/Object.wait(Object.java:485)
    at org/apache/tomcat/util/threads/ThreadPool$ControlRunnable.run(ThreadPool.java:658)
    ^-- Lock released while waiting: org/apache/tomcat/util/threads/ThreadPool$ControlRunnable@0x0179EB28[fat lock]
    at java/lang/Thread.run(Thread.java:619)
    at jrockit/vm/RNI.c2java(IIIII)V(Native Method)
    -- end of trace 
"TP-Processor2" id=15 idx=0x40 tid=2336 prio=5 alive, in native, waiting, daemon
    -- Waiting for notification on: org/apache/tomcat/util/threads/ThreadPool$ControlRunnable@0x0179EF40[fat lock]
    at jrockit/vm/Threads.waitForNotifySignal(JLjava/lang/Object;)Z(Native Method)
    at java/lang/Object.wait(J)V(Native Method)
    at java/lang/Object.wait(Object.java:485)
    at org/apache/tomcat/util/threads/ThreadPool$ControlRunnable.run(ThreadPool.java:658)
    ^-- Lock released while waiting: org/apache/tomcat/util/threads/ThreadPool$ControlRunnable@0x0179EF40[fat lock]
    at java/lang/Thread.run(Thread.java:619)
    at jrockit/vm/RNI.c2java(IIIII)V(Native Method)
    -- end of trace 
"TP-Processor3" id=16 idx=0x44 tid=2644 prio=5 alive, in native, waiting, daemon
    -- Waiting for notification on: org/apache/tomcat/util/threads/ThreadPool$ControlRunnable@0x0179F400[fat lock]
    at jrockit/vm/Threads.waitForNotifySignal(JLjava/lang/Object;)Z(Native Method)
    at java/lang/Object.wait(J)V(Native Method)
    at java/lang/Object.wait(Object.java:485)
    at org/apache/tomcat/util/threads/ThreadPool$ControlRunnable.run(ThreadPool.java:658)
    ^-- Lock released while waiting: org/apache/tomcat/util/threads/ThreadPool$ControlRunnable@0x0179F400[fat lock]
    at java/lang/Thread.run(Thread.java:619)
    at jrockit/vm/RNI.c2java(IIIII)V(Native Method)
    -- end of trace 
"TP-Processor4" id=17 idx=0x48 tid=1384 prio=5 alive, in native, daemon
    at java/net/PlainSocketImpl.socketAccept(Ljava/net/SocketImpl;)V(Native Method)
    at java/net/PlainSocketImpl.accept(PlainSocketImpl.java:384)
    ^-- Holding lock: java/net/SocksSocketImpl@0x0176E128[biased lock]
    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:686)
    at java/lang/Thread.run(Thread.java:619)
    at jrockit/vm/RNI.c2java(IIIII)V(Native Method)
    -- end of trace 
"TP-Monitor" id=18 idx=0x4c tid=2788 prio=5 alive, in native, waiting, daemon
    -- Waiting for notification on: org/apache/tomcat/util/threads/ThreadPool$MonitorRunnable@0x0179FBB0[fat lock]
    at jrockit/vm/Threads.waitForNotifySignal(JLjava/lang/Object;)Z(Native Method)
    at java/lang/Object.wait(J)V(Native Method)
    at org/apache/tomcat/util/threads/ThreadPool$MonitorRunnable.run(ThreadPool.java:561)
    ^-- Lock released while waiting: org/apache/tomcat/util/threads/ThreadPool$MonitorRunnable@0x0179FBB0[fat lock]
    at java/lang/Thread.run(Thread.java:619)
    at jrockit/vm/RNI.c2java(IIIII)V(Native Method)
    -- end of trace 
"http-8080-1" id=20 idx=0x50 tid=2192 prio=5 alive, in native, waiting, daemon
    -- Waiting for notification on: org/apache/tomcat/util/net/JIoEndpoint$Worker@0x016649A8[fat lock]
    at jrockit/vm/Threads.waitForNotifySignal(JLjava/lang/Object;)Z(Native Method)
    at java/lang/Object.wait(J)V(Native Method)
    at java/lang/Object.wait(Object.java:485)
    at org/apache/tomcat/util/net/JIoEndpoint$Worker.await(JIoEndpoint.java:416)
    ^-- Lock released while waiting: org/apache/tomcat/util/net/JIoEndpoint$Worker@0x016649A8[fat lock]
    at org/apache/tomcat/util/net/JIoEndpoint$Worker.run(JIoEndpoint.java:442)
    at java/lang/Thread.run(Thread.java:619)
    at jrockit/vm/RNI.c2java(IIIII)V(Native Method)
    -- end of trace 
===== END OF THREAD DUMP ===============

上一页  1 2 

Tags:Java 代码 触发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接