0

jstack を使用して、CPU 使用率が最も高い PID のスレッド ダンプを取得しました。nid 0x4974 のスレッドを指していました。

"VM Thread" prio=10 tid=0x00007ffc60068800 nid=0x4974 runnable "VM Periodic Task Thread" prio=10 tid=0x00007ffc60098000 nid=0x497b 条件付き待機 JNI グローバル参照: 1182

Web で見たサンプル スレッド ダンプとは異なり、スレッドの状態と実行されているコードがないため、分析の進行に問題があります。.txtそして、スレッドダンプファイルを分析できるオンラインのフリーウェアはありますか?

答えてくれた人ありがとう。わかりましたので、samurai、tda、および ibm スレッド ダンプ ツールの使用方法を学ぶことができました。問題は、作成されるスレッドの数、モニターを待機しているスレッド、ロックおよびブロックにあるようです。しかし、追加の入力があるかどうか疑問に思っていました。これは私がTDAから得たものです:

CPU使用率が100%のとき

Overall Thread Count    1001
Overall Monitor Count   644
Number of threads waiting for a monitor  50
Number of threads locking a monitor 636
Number of threads sleeping on a monitor 0
Number of deadlocks 0
Number of Monitors without locking threads 0

リセットしたら

Overall Thread Count  32
Overall Monitor Count  13
Number of threads waiting for a monitor  0
Number of threads locking a monitor  13
Number of threads sleeping on a monitor  13
Number of deadlocks 0
Number of Monitors without locking threads 0

すべてのスレッドの 40% がモニター上でスリープ状態になっています。

これは、オーバーロードされているか利用できない外部リソース (データベースなど) を待っているか、何かを実行するために待機していること (アイドルスレッド) を示している可能性があります。すべてのアイドル状態のスレッドを除外するフィルターを使用して、スリープ状態のスレッドを確認する必要があります。

お客様は60名ほどです。

CPU 使用率が 100% のときに、リセット後にスレッドダンプをアップロードしました。I also included the tools that i used (samurai,tda,and ibm thread and monitor dump analyzer) http://www.mediafire.com/?901mduvodm97d8v,x72cdixp8fltabu,fhfw4e50c7fzu4t,1oq2npaxmtxz0dq,i0u997fhvxfagd3,cdewe4de6x3rhe4,w2ndwqw2ekwixkd,qsbst5ow6f59p75,9fx8w8qpfdhjmyx, levpqppb3ouh71q

4

2 に答える 2

1

これらの内部スレッドには Java スレッド スタックがないため、通常のツールは役に立ちません。これらが過度の CPU を消費している場合、まず使用している Java のバージョンにバグがあると考えられます。Java 6 update 45 または Java 7 update 45 でこれを試してみます。

この問題を診断するには、ネイティブ スタック ダンプと、JVM の内部を十分に理解している必要があります。

于 2013-11-04T08:18:44.513 に答える
0

IBM Thread and Monitor Dump Analyzer for Javaに移動して、IBMからツールをダウンロードします。ただし、目的のためには、自分でスレッド ダンプを分析し、jstack から見つけた ID をスレッド ダンプ内のスレッド スタック トレースにマップすることができる場合があります。スレッド ダンプを取得するには:

on Linux: kill -3 pid
on Windows: Ctrl-Break (not Ctrl-C)

その後、コマンド ウィンドウまたは stdout からスレッド ダンプをコピーできます。

于 2013-11-04T06:13:37.977 に答える