2

ここで次のような記事をいくつか見てきました。

Windows での Java スタック ダンプ

プログラムでスレッドダンプ /JDI (Java Debugger Interface) しかし、正確な答えは得られませんでした。

問題: サービスとして実行される Windows 上の Java5 アプリケーションがあります (そのため、ダンプにCtrl+を使用できるコンソールがありませんBreak)。また、アプリケーションがハングして、スレッド ダンプが必要になることもあります。

「jstack」を試してみましたが、env では機能しません (Java6 のみと互換性があることがわかりました)。

そこで、Java アプリ プロセスにアタッチする .dll 呼び出しメソッドを介してスレッド ダンプを呼び出す C++ アプリを作成しました。このため、ローカル管理者権限が必要であり、あまり良くありません。

したがって、管理者権限なしで機能し、既存のコードを大幅に変更せずに Java 5 で機能する他のオプションが必要です。

LOOP スレッド ダンプで印刷する方法は(Thread.getAllStackTraces())、機能させるために多くのアプリケーションをリファクタリングする必要があるため、オプションではありません。

そのため、アプリケーションの「外部」から機能するユーティリティだけが最良の選択肢になります。

前もって感謝します!

4

2 に答える 2

0

JConsole でプロセスにアタッチして、デッドロックを検出し、スレッドのスタック トレースを取得できます。詳細については、http: //java.sun.com/developer/technicalArticles/J2SE/jconsole.htmlを参照してください。

于 2010-09-14T12:10:04.357 に答える
0

1 つのオプションは、jmap を使用してすべての情報をダンプし、他のツールを使用して分析することです。

jmap -dump:format=b,file=<filename>.hprof <jvm_pid>

よくわかりませんが、Java 5 で動作すると思います。

参考文献:

于 2010-09-02T13:12:09.383 に答える