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