2012-02-08 26 views
2

私は、Linuxボックス上のGlassfish 3.1.1で動作している私のアプリケーションのスレッドダンプを取得/解析しようとしています。私はそれを行うための2つの方法に出くわしました。 GlassFish管理コンソールでGlassfish v3 - スレッドダンプの取得/解析方法

  1. コマンドラインで実行kill -QUIT <pid>
  2. 、共通タスクに行く - > [サーバー(管理サーバー) - > [全般]タブ。 「JVMレポート」をクリックし、「表示」ドロップダウンボックスから「スレッドダンプ」を選択します。

これらのスレッドダンプの両方の結果は異なります。終了タグ

</tty> 
</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 &quot;java_re&quot; 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): 

     &quot;pool-28-thread-1&quot; 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 &lt;0x00002aaab547d7f0&gt; (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 ... 

注:キル方法は、XML(hotspot_log)であり、この構造を持つファイル(/domains/domain1/logs/jvm.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: [email protected] 
    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バージョンを開くことを発見しましたが、XML以外のバージョンも開いてから(両方とも表示されるまで)UIに表示されません。

なぜ形式が異なるのですか? 1つは分析のために他のより優先されますか?それは問題ですか?

答えて

1

両方のダンプ形式が奇数です。私はGlassfishがこれらのダンプ要求に固有の何かをやっていると推測します。

jstackは、JDKに付属しています。それは質問のためにここに一般的に掲示される形式です。

ダンプがより次のようになります

012-02-04 18:00:01 
Full thread dump Java HotSpot(TM) 64-Bit Server VM (16.3-b01 mixed mode): 

"pool-2-thread-1143" prio=3 tid=0x0000000105419000 nid=0x1fe0 waiting on condition xfffffffb43dfe000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
2

あなたはGlassFishのV3.1でスレッドダンプレポートを生成するには、次のコマンドを使用することができます。

asadmin generate-jvm-report --type=thread

REF:

http://docs.oracle.com/cd/E18930_01/html/821-2436/ghuvy.html

+0

これは私の質問に記載されているように、コンソールからスレッドダンプを生成します。問題はそれを生成することではなく、それを分析することでした。 – sdoca

関連する問題