2

JBoss 5 を実行しています。時間の経過とともにメモリ キープが増加していることがわかります。アクティブなスレッドの数が増加しています。次のスタック トレースは、多くのスレッドの 1 つであるアクティブなスレッドから取得されます (これらは、時間の経過とともに追加されるスレッドです)。スタックトレースから何を学ぶことができますか? 何が起こっているのかをより深く理解し、より明確に把握するにはどうすればよいですか?

名前: WorkManager(2)-92 状態: java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4e2e52 で待機中 総ブロック: 1 総待機: 1

スタック トレース: sun.misc.Unsafe.park(ネイティブ メソッド) java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java: 1925) java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358) java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java: 907) java.lang.Thread.run(Thread.java:619)

ありがとう、ロッド

4

3 に答える 3

1

そのスレッドは getTask() を待っているように見えます。つまり、何らかの作業を待っているだけです。

リクエストが来ると新しいスレッドが生成されますが、実際の作業で非常に多くのスレッドがビジーでない限り、心配する必要はありません。

JVM がその一部をガベージ コレクションすることを決定するまで、メモリ使用量は時間の経過とともに増加します。増加し続け、jconsole から GC を実行しても違いがない場合は、メモリ リークが発生している可能性があります。リークを見つけるのは難しい場合がありますが、MATを使用すると簡単に見つけることができます。

于 2009-10-21T14:59:05.647 に答える
0

jvisualvmでプロファイリングすることから始めることをお勧めします。ヒープ使用量、スレッド、ガベージ コレクションなどの経時的なグラフを取得します。

jmapでヒープ ダンプを取得し、 jhatまたはmatで分析することもできます。

于 2009-10-22T01:30:53.393 に答える
0

これについては、JDK1.6 または JDK1.7 から JConsole を実行することで学習できます。JDK1.5 の JConsole.exe は「旧式」です。

于 2009-10-21T15:58:25.277 に答える