2009-06-25 6 views

答えて

4

あなたのJDKのbinディレクトリに両方のjconsoleを使用したり、jstackことができます。特にjconsoleを使用すると、プロセスに接続してロックされているリソースなどのスレッドを監視でき、デッドロック状態を識別するのに役立ちます。

+2

私はこの質問が、アプリケーション実行中のロック競合に関するいくつかの統計に関連していると考えています。これはシステムのホットロックです。 – akarnokd

2

VisualVMは(Javaの1.6の一部)(see

+0

VisualVMには別のプラグインが必要ですか? – akarnokd

2

JDKにはいくつかの組み込みサポートがあります - UNIXでは、プロセスをWindows下でkill-ctrl-breakします。これにより、完全なスレッド・ダンプが表示され、その後にデッドロックが検出されます。さらに、スレッドdusmpでは、どのスレッドがどのようなロックを所有しているのかを確認し、それらを互いに比較することができます。

+1

スレッドダンプを取得するためにプロセスを強制終了する必要はありません。ちょうどjstack を実行します。はプロセスIDです。 –

+3

kill -3コマンドはプロセスを強制終了しません。ただ信号を送るだけですが、プロセスは引き続き実行されます。 –

3

また、Eclipseのデバッガでこれを表示することもできます。デバッグビューでは、ビューツールバーの小さな下三角メニューを使用して、「Java-> Show Monitors」をオンにします。

デッドロックの疑いがある場合は、アプリケーションを一時停止(デバッグビューでアプリケーションを選択し、デバッグビューのツールバーで一時停止ボタンを押す)し、デッドロックがある場合はブロックスレッドが赤くなります。これらのスレッドを展開すると、ロック競合が表示されます。

2

コードを所有している場合は、競合統計を収集するLock実装を作成/探すことができます。そうでない場合は、他の記事で提案されているツールを試してみてください。

+0

あなたはこの種の実装の例を持っていますか(つまりJavaコード) – Rhubarb

関連する問題