11

J2EEサーバーのメモリの問題を診断しようとしています。ライブサーバーにjconsoleをセットアップし、それを介してTomcatサーバーのステータスを監視しようとしています。jconsoleの[スレッド]タブについて簡単な質問があります。スレッドリストにFinalizerという名前のスレッドが表示されます。このスレッドの「ブロックされた合計」数は増え続けています。たとえば、現在は4,049で、1時間前は3,867でした。

Name: Finalizer
State: WAITING on java.lang.ref.ReferenceQueue$Lock@1b79cfd
Total blocked: 4,049 Total waited: 1,579

このスレッドはどういう意味ですか?どういうわけかGCと関係がありますか?ファイナライズ待ちのオブジェクトの数がゼロであることを示すヒープダンプをダウンロードしました。

サーバーの最大ヒープサイズは現在200MBで、ヒープサイズは100〜150 MBのままです。[PerformGC]をクリックすると、ヒープスペースが解放されているのがわかります。ただし、これによって、WindowsタスクマネージャーでこのTomcatプロセスが使用するメモリの量は変わりません。現在700MB以上を消費しています。

私がそれについてどうすべきかについてのどんなヒントも大いに感謝されるでしょう。サーバーの設定についてさらに情報が必要な場合は、質問してください。

前もって感謝します。

4

4 に答える 4

12

私は私の質問に対する答えを見つけたと思います。「合計ブロック」および「合計待機」は、スレッドが待機またはブロックされた回数を単純にカウントしたものです。JConsoleは、この情報をThreadInfoから取得しています。

ブロックされたカウントは、スレッドがモニターに入る、またはモニターに再び入るのをブロックした合計回数です。つまり、スレッドがjava.lang.Thread.State.BLOCKED状態になっている回数。

待機カウントは、スレッドが通知を待機した合計回数です。つまり、スレッドがjava.lang.Thread.State.WAITINGまたはjava.lang.Thread.State.TIMED_WAITING状態にあった回数。

于 2010-11-16T05:50:44.240 に答える
1

名前:ファイナライザー状態:java.lang.ref.ReferenceQueue $ Lock @ 1b79cfdで待機中ブロックされた合計:4,049待機された合計:1,579

ReferenceQueueは、すべての未使用オブジェクトの参照を維持しています(ファイナライズを待機しています)。つまり、ガベージコレクションを待機しているオブジェクトは4049個あります。

メモリリークを探すときは、ダンプを実行する前に、必ず完全なGC(または何も取り戻せなくなるまで多くのGC)を実行してください。

于 2010-12-10T20:01:05.360 に答える
0

Windowsタスクマネージャは仮想メモリのサイズを表示し、ほとんどの場合正確ではありません。私はこれを何度も見てきましたが、フットプリントとしてJConsoleが示しているのは、適切なメモリフットプリントです。

JConsoleの詳細については、こちらを確認してください。

于 2010-11-15T06:31:50.010 に答える
0

私にはデッドロックのように見えます:http: //download.oracle.com/javase/tutorial/essential/concurrency/deadlock.html

無限に待機している可能性のある同期メソッドはありますか?

于 2010-11-15T15:06:16.077 に答える