12

状況を分析するには、デッドロック状態の 2 つのスレッドのスタックを調べる必要があります。はJVM現在稼働しており、データはそこにありますが、プロセスからデータを抽出するには何らかのツールが必要です。type のスタックにある 6 つの変数だけを気にしますString。どんなアイデアでも大歓迎です。JVMバージョンは有効になっていますが、接続6_35が構成されていません。再現するのは非常に困難です。linuxJMXprofiler/debugger

4

3 に答える 3

6

ヒープダンプビューアを使用してちょっとしたトリックを見つけました(この場合はYourKitですが、他の場合も同様に機能する可能性があります)。基本的に、Threadクラスのすべてのインスタンスを列挙してから、必要なスレッドを名前で見つけて開きます。スタック変数は、次のように<ローカル変数>としてマークされます。

ここに画像の説明を入力してください

すべての変数がここにあるわけではありませんが、メソッドに引数として渡されるすべての変数が表示されます。プロファイラーがこの問題にさらにうまく対処できるかどうか疑問に思いますか?

于 2013-03-05T23:53:57.180 に答える
3

これを簡単に行うことはできません。通常jstackのツールはスタックのみをダンプします。技術的には、(を使用して)ヒープ全体をダンプすることを試みることができますがjmap、この特定の変数を探すことは、可能であれば苦痛になる可能性があります。

これはセキュリティ上の理由から簡単には実行できないことに注意してください。スタックトレースには、資格情報やその他の機密データを含めることができます。

于 2012-11-13T18:17:48.567 に答える
0

プロセスにSIGQUITを送信して、ダンプを提供し、VM を実行し続けることができます。IBM の JVMと同様に、Sun/Oracle JVM を備えた Unix ライクな OS で実行できます。出力が目的に適しているかどうかはわかりませんが、タフ。おそらく、他の回答のjstack/に似ています。jmap

于 2012-11-13T18:27:48.223 に答える