Java Web Start アプリケーションのスレッド ダンプを作成するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/90682

質問

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 に出力されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top