BEA Weblogic Server v9.2 ランタイム環境を介して Eclipse 内で Weblogic アプリケーションを起動しています。これがコマンドラインから直接実行されている場合は、ctrl-BREAK を実行してスレッド ダンプを強制します。Eclipseでそれを行う方法はありますか?
9 に答える
確かに(VonCがSOスレッドを指していることに感謝します)、Dustinは、彼のメッセージへのコメントで、jstackを指しています。
Eclipseで(GUIを使用して)小さなJavaアプリケーションを実行しました。関連するjavaw.exeをWindowsのプロセスマネージャーとそのPID 7088で確認できます(もちろん、Unixではさらに簡単です)。
コマンドプロンプトjstack 7088
で入力すると、スレッドごとに必要なスタックダンプがあります。
涼しい。
Eclipseから直接それを行うことができればもっと良いでしょうが、それはそのままでもすでに役に立ちます。
SendSignalを確認してください: http ://www.latenighthacking.com/projects/2003/sendSignal/
デバッグ モードのときに実行できます。デバッグ パースペクティブのデバッグ ビューに移動し、起動したプロセスをクリックして一時停止をクリックすると、すべてのプロセスのグラフィカル スタックが表示されます。
注 : これは、リモート デバッグを使用している場合にも機能します。Eclipse から weblogic を起動する必要はありません。単独で起動し、デバッグ ポートを開き、そのための「リモート Java アプリケーション デバッグ構成」を作成できます。
Eclipse Wiki: How to Report a Deadlockには、Eclipse でスレッド ダンプを作成するためのすべての可能なオプションがリストされています。具体的な状況に応じて、どちらかがうまく機能する可能性があります。Windows での個人的なお気に入りは、Adaptj Stacktrace ツールです。
UI ベースのソリューションを好む場合は、 visualvmを選択することをお勧めします。(JDKで配布されていることも利点です)
visualvm でスレッド ダンプを取得するには:
- プロセス (リモートまたはローカル) に接続し、
- (タブ)に行く
Threads
->Thread Dump
(ボタン)
StackTraceは、試すことができる別のオプションです。機能から:
Windowsサービス (Tomcat など)として実行されている Java プロセスのスレッド ダンプは、 javaw.exe、任意のブラウザー内で実行されているアプレット、または別のプロセス内に埋め込まれた JVM で開始されます。StackTrace は、Windows、Linux、および Mac OS X で動作します。
JVisualVMを介して接続し、スレッドダンプを取得できます。アプリケーションツリーからアプリケーションノードを右クリックし、[スレッドダンプ]を選択するだけです
Linux では、少なくとも aを実行ps -ef | grep java
して PID を取得し、次に aを実行するkill -3 PID
と、それが Eclipse コンソールに出力されます。
( eclipse.ini内の) javaw.exe の代わりに java.exe を使用して Eclipse を起動しようとしましたか?
これにより、このバグとこのメッセージで説明されているように、必要なコンソールが得られる場合があります。
他のアイデア (Java オプションに関して) は、この他の SO の質問から派生する可能性があります。