Java Web Start アプリケーションのスレッド ダンプを作成するにはどうすればよいですか
-
01-07-2019 - |
質問
Java Web Start アプリケーションのスレッド ダンプを取得することはできますか?もしそうなら、どのようにして?
開発者以外(顧客)でもスレッド ダンプを作成できる簡単な解決策があれば良いのですが。あるいは、スレッド ダンプをプログラムで作成することは可能ですか?
Java Web Start コンソールで「t」を押すとスレッドのリストを取得できますが、スタックトレースは含まれません。
回答に特定の Java バージョンが必要な場合は、その旨を明記してください。
解決
コンソールで、T ではなく V を押します。
t: dump thread list
v: dump thread stack
これは JDK6 で動作します。他の人のことは知りません。
あるいは、JDK5 (およびおそらくそれ以前) では、すべてのスレッドの完全なスタック トレースを標準出力に送信できます。
Windows の場合: Java コンソールで ctrl-break を入力します。
Unix の場合: kill -3 <java_process_id>
(例えば。キル-3 5555)。これによってアプリが強制終了されることはありません。
もう 1 つ:他の人が言うように、プログラムでスタックを取得できます。 Thread
授業だけど気をつけて Thread.getAllStackTraces()
JDK6 より前ではメモリ リークがあるためです。
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6434648
よろしく、
スコッティ
他のヒント
最近の JDK (残念ながら JRE ではありません) には、そのようなことを行う jstack のようなツールが含まれています。バージョン 5 の JVM には、スレッド ダンプ、メモリ統計などを取得するための JMX 拡張機能が含まれています。Web Start アプリケーションを含むすべての Java アプリケーションでこの機能を利用できます。
JDK をインストールするか、同じことを行う JMX クライアントを作成する必要があります。を見てみましょう http://java.sun.com/javase/6/docs/technotes/guides/management/ さらに詳しい情報を得るには。
1.5以降、使用できます Thread.getAllStackTraces()
を得るために Map
繰り返します。
理想的な出力は Ctrl-\ (または Ctrl-Break など) から生成されるものですが、これを生成する文書化された方法はないようです。Sun の JVM に限定したい場合 (またはリフレクションを使用すると思います)、 sun.*
パッケージを見て、何か興味深いものが表示されるかどうかを確認してください。
試す
StackTraceElement[] stack = Thread.currentThread().getStackTrace();
次に、コレクションを反復処理して、関心のある上位 x 個のスタック要素を表示できます。
Java 5 以降、Thread クラスの getStackTrace() メソッドがあります。以前のバージョンの場合は、次のことができます。
Thread.currentThread().dumpStack();
これにより、スタック トレースが System.out に出力されます。