Java Web Start アプリケーションのスレッド ダンプを取得することはできますか? もしそうなら、どのように?
開発者以外 (顧客) がスレッド ダンプを作成できる簡単な解決策があればいいのですが。または、プログラムでスレッド ダンプを作成することは可能ですか?
Java Web Start コンソールでは、「t」を押すとスレッドのリストを取得できますが、スタック トレースは含まれません。
回答に特定の Java バージョンが必要な場合は、そう言ってください。
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>
(例: kill -3 5555)。これでアプリが強制終了されることはありません。
もう1つ:他の人が言うように、Thread
クラスを介してプログラムでスタックを取得できますがThread.getAllStackTraces()
、メモリリークがあるため、JDK6より前に注意してください。
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6434648
よろしく、
スコッティ
試す
StackTraceElement[] stack = Thread.currentThread().getStackTrace();
次に、コレクションを反復処理して、関心のある上位 x スタック要素を表示できます。
最近の 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()
、 aMap
を反復処理するために使用できます。
理想的な出力は Ctrl-\ (または Ctrl-Break など) から生成されるものですが、これを生成する文書化された方法はないようです。Sun の JVM に制限したい (またはリフレクションを使用したい) 場合は、sun.*
パッケージを掘り下げて、何か興味深いものが表示されるかどうかを確認できます。
Java 5 以降、 Thread クラスの getStackTrace() メソッドがあります。以前のバージョンでは、次のことができます。
Thread.currentThread().dumpStack();
これにより、スタック トレースが System.out に出力されます。