5

Java Web Start アプリケーションのスレッド ダンプを取得することはできますか? もしそうなら、どのように?

開発者以外 (顧客) がスレッド ダンプを作成できる簡単な解決策があればいいのですが。または、プログラムでスレッド ダンプを作成することは可能ですか?

Java Web Start コンソールでは、「t」を押すとスレッドのリストを取得できますが、スタック トレースは含まれません。

回答に特定の Java バージョンが必要な場合は、そう言ってください。

4

5 に答える 5

6

コンソールで、T ではなく V を押します。

t:   dump thread list
v:   dump thread stack

これは JDK6 で動作します。他の人については知りません。

別の方法として、JDK5 (およびおそらくそれ以前) では、すべてのスレッドの完全なスタック トレースを標準出力に送信できます。

Windows の場合: Java コンソールで ctrl-break と入力します。

Unix の場合: kill -3 <java_process_id> (例: kill -3 5555)。これでアプリが強制終了されることはありません。

もう1つ:他の人が言うように、Threadクラスを介してプログラムでスタックを取得できますがThread.getAllStackTraces()、メモリリークがあるため、JDK6より前に注意してください。

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6434648

よろしく、

スコッティ

于 2008-09-18T09:09:10.713 に答える
2

試す

StackTraceElement[] stack = Thread.currentThread().getStackTrace();

次に、コレクションを反復処理して、関心のある上位 x スタック要素を表示できます。

于 2008-09-18T07:28:01.317 に答える
2

最近の JDK (残念ながら JRE ではありません) には、そのようなことを行う jstack などのツールが含まれています。バージョン 5 の JVM には、スレッド ダンプ、メモリ統計などを取得するための JMX 拡張機能が含まれています。Web Start アプリケーションを含むすべての Java アプリケーションで、この機能を利用できます。

JDK をインストールするか、同じことを行う JMX クライアントを作成する必要があります。詳細については、http://java.sun.com/javase/6/docs/technotes/guides/management/を参照してください。

于 2008-09-18T07:37:02.650 に答える
2

1.5 以降Thread.getAllStackTraces()、 aMapを反復処理するために使用できます。

理想的な出力は Ctrl-\ (または Ctrl-Break など) から生成されるものですが、これを生成する文書化された方法はないようです。Sun の JVM に制限したい (またはリフレクションを使用したい) 場合は、sun.*パッケージを掘り下げて、何か興味深いものが表示されるかどうかを確認できます。

于 2008-09-18T07:51:00.403 に答える
0

Java 5 以降、 Thread クラスの getStackTrace() メソッドがあります。以前のバージョンでは、次のことができます。

Thread.currentThread().dumpStack();

これにより、スタック トレースが System.out に出力されます。

于 2008-09-18T07:50:27.393 に答える