java-Glassfish v3-如何获取/分析线程转储?
作者:互联网
我正在尝试获取/分析在Linux机器上运行于Glassfish 3.1.1中的应用程序的线程转储.我遇到了两种方法.
>运行kill -QUIT< pid>在命令行上
>在Glassfish管理控制台中,转到“常见任务->”.服务器(管理服务器)->常规选项卡.单击“ JVM报告”,然后从“查看”下拉框中选择“线程转储”.
这两个线程转储的结果是不同的. kill方法生成的文件(/domains/domain1/logs/jvm.log)是XML(hotspot_log),具有以下结构:
<?xml version='1.0' encoding='UTF-8'?>
<hotspot_log version='160 1' process='9426' time_ms='1328662710633'>
<vm_version>
<name>Java HotSpot(TM) 64-Bit Server VM</name>
<release>17.0-b16</release>
<info>
Java HotSpot(TM) 64-Bit Server VM (17.0-b16) for linux-amd64 JRE (1.6.0_21-b06),
built on Jun 22 2010 01:10:00 by "java_re" with gcc 3.2.2
(SuSE Linux)
</info>
</vm_version>
<vm_arguments>
<args>
-XX:+UnlockDiagnosticVMOptions -XX:MaxPermSize=192m -XX:NewRatio=2 -XX:+LogVMOutput
... SNIP ...
</args>
<command>
... SNIP ...
</command>
<launcher>
SUN_STANDARD
</launcher>
<properties>
java.vm.specification.version=1.0
... SNIP ...
</properties>
</vm_arguments>
<tty>
<writer thread='1085897024' />
<dependency_failed type='unique_concrete_method'
x='java/lang/ThreadLocal getMap (Ljava/lang/Thread;)Ljava/lang/ThreadLocal$ThreadLocalMap;'
witness='java/lang/InheritableThreadLocal' stamp='1.955' />
<dependency_failed type='unique_concrete_method'
x='java/lang/ThreadLocal getMap (Ljava/lang/Thread;)Ljava/lang/ThreadLocal$ThreadLocalMap;'
witness='java/lang/InheritableThreadLocal' stamp='1.955' />
<dependency_failed type='unique_concrete_method'
x='java/lang/ThreadLocal getMap (Ljava/lang/Thread;)Ljava/lang/ThreadLocal$ThreadLocalMap;'
witness='java/lang/InheritableThreadLocal' stamp='1.955' />
<dependency_failed type='unique_concrete_method'
x='java/lang/ThreadLocal getMap (Ljava/lang/Thread;)Ljava/lang/ThreadLocal$ThreadLocalMap;'
witness='java/lang/InheritableThreadLocal' stamp='1.955' />
... SNIP ...
<writer thread='1106913600' />
2012-02-08 09:54:18
Full thread dump Java HotSpot(TM) 64-Bit Server VM (17.0-b16 mixed mode):
"pool-28-thread-1" prio=10 tid=0x00002aaae959c800 nid=0x28d5
runnable [0x0000000049da0000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
- locked <0x00002aaab547d7f0> (a java.io.BufferedInputStream)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
at
... SNIP ...
请注意,结束标记
</tty>
</hotspot_log>
文件中丢失.有人知道为什么吗?
通过管理控制台完成的转储会生成以下格式的报告:
server
View:
Full Java Thread Dump Java HotSpot(TM) 64-Bit Server VM 17.0-b16 Sun Microsystems Inc.
Number of threads: 97
Number of daemon threads: 83
Peak live thread count since the Java virtual machine started or peak was reset: 116
Is support for thread contention monitoring available on this JVM? [true]
Is thread contention monitoring enabled? [false]. If false, some thread synchronization statistics are not be available.
Is support for CPU time measurement for any thread available on this JVM? [true]
Is thread CPU time measurement enabled? [true]. If false, thread execution times are not available for any thread.
--------------------------------------------------------------------------------
Thread Execution Information:
-----------------------
Thread "Ejb-Timer-Thread-103" thread-id: 616 thread-state: TIMED_WAITING Waiting on lock: java.util.concurrent.SynchronousQueue$TransferStack@28ee94c8
at: sun.misc.Unsafe.park(Native Method)
at: java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
at: java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:424)
at: java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:323)
at: java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:874)
at: java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:945)
at: java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at: java.lang.Thread.run(Thread.java:619)
Thread Synchronization Statistics:
-----------------------
Number of times this thread was blocked (to enter/reenter a Monitor): 0
Number of times this thread waited for a notification (i.e. it was in WAITING or TIMED_WAITING state): 20
Total CPU time for this thread: 0 seconds 0 nanoseconds.
User-level CPU time for this thread: 0 seconds 0 nanoseconds.
Object Monitors currently held or requested by this thread: []
Ownable Synchronizers (e.g. ReentrantLock and ReentrantReadWriteLock) held by this thread: []
--------------------------------------------------------------------------------
Thread Execution Information:
-----------------------
Thread "RMI TCP Connection(206)-127.0.0.1" thread-id: 613 thread-state: RUNNABLE Running in native
at: java.net.SocketInputStream.socketRead0(Native Method)
at: java.net.SocketInputStream.read(SocketInputStream.java:129)
at: java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at: java.io.BufferedInputStream.read(BufferedInputStream.java:237)
at: java.io.DataInputStream.readUnsignedShort(DataInputStream.java:320)
at: java.io.DataInputStream.readUTF(DataInputStream.java:572)
at: java.io.DataInputStream.readUTF(DataInputStream.java:547)
at: sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:774)
at: sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at: java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at: java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at: java.lang.Thread.run(Thread.java:619)
Thread Synchronization Statistics:
-----------------------
Number of times this thread was blocked (to enter/reenter a Monitor): 0
Number of times this thread waited for a notification (i.e. it was in WAITING or TIMED_WAITING state): 0
Total CPU time for this thread: 0 seconds 0 nanoseconds.
User-level CPU time for this thread: 0 seconds 0 nanoseconds.
Object Monitors currently held or requested by this thread: []
Ownable Synchronizers (e.g. ReentrantLock and ReentrantReadWriteLock) held by this thread: []
--------------------------------------------------------------------------------
... SNIP ...
No deadlock found
为了分析转储,我尝试了TDA-线程转储分析器(http://java.net/projects/tda/),发现它将打开XML版本,但是直到我打开它才会显示在UI中以及非XML版本(然后都显示).
为什么格式如此不同?在分析中,一个相对于另一个优先吗?有关系吗?
解决方法:
您可以使用以下命令在glassfish v3.1中生成线程转储报告:
asadmin generate-jvm-report –type = thread
参考:
http://docs.oracle.com/cd/E18930_01/html/821-2436/ghuvy.html
标签:glassfish-3,thread-dump,java 来源: https://codeday.me/bug/20191101/1985683.html