web-dev-qa-db-ja.com

Eclipseでスレッドダンプを強制する方法は?

BEA Weblogic Serverv9.2ランタイム環境を介してEclipse内でWeblogicアプリケーションを起動しています。これがコマンドラインから直接実行されている場合は、ctrl-BREAKを実行してスレッドダンプを強制します。 Eclipseでそれを行う方法はありますか?

28
Paul Croarkin

確かに(VonCがSOスレッドを指すように感謝します)、ダスティンは彼のメッセージへのコメントで jstack を指します。

Eclipseで少しJavaアプリケーション(GUIを使用)を実行しました。Windowsのプロセスマネージャーで関連するjavaw.exeとそのPID 7088を確認できます(Unixではさらに簡単です。コース)。

コマンドで入力した場合プロンプトjstack 7088、スレッドごとに必要なスタックダンプがあります。
涼しい。

Eclipseから直接それを行うことができればもっと良いでしょうが、それはそのままですでに役に立ちます。

25
PhiLho

sendSignalを確認してください: http://www.latenighthacking.com/projects/2003/sendSignal/

7
lesliel

デバッグモードのときに実行できます。デバッグパースペクティブのデバッグビューに移動し、起動したプロセスをクリックして[一時停止]をクリックすると、すべてのプロセスのグラフィカルスタックが表示されます。

注:これはリモートデバッグを使用する場合にも機能します。Eclipseからweblogicを起動する必要はありません。単独で起動し、デバッグポートを開いて、「リモートJavaアプリケーションデバッグ構成」を作成できます。 " それのための。

6
Denis R.

Eclipse Wiki: デッドロックを報告する方法 Eclipseでスレッドダンプを作成するためのすべての可能なオプションをリストします。具体的な状況に応じて、どちらか一方の方がうまくいく可能性があります。Windowsでの私の個人的なお気に入りは、AdaptjStacktraceツールです。

3

StackTrace は、試すことができるもう1つのオプションです。機能から:

Windowsサービス(Tomcatなど)として実行されているJavaプロセスのスレッドダンプは、javaw.exe、任意のブラウザ内で実行されているアプレット、または別のプロセス内に埋め込まれたJVM。StackTraceはWindows、Linux、およびMac OSXで動作します。

2
Simon Lieschke

uIベースのソリューションを好む場合 visualvm が良い選択かもしれません。 (JDKと一緒に配布されることも利点です)

Visualvmでスレッドダンプを取得するには:

  1. プロセス(リモートまたはローカル)に接続し、
  2. Threads(タブ)-> Thread Dump(ボタン)に移動します
2
Peter Butkovic

Linuxでは、少なくともps -ef | grep Javaを実行してPIDを取得してから、kill -3 PIDを実行すると、Eclipseコンソールに出力されます。

0
Alper Akture

Javaw.exeではなくJava.exeを使用してEclipseを起動しようとしましたか( Eclipse.ini )?

このバグ および このメッセージ で説明されているように、必要なコンソールが提供される可能性があります。

他のアイデア(Javaオプションの観点から)はこれから導き出すことができます その他SO質問

0
VonC

JVisualVMを介して接続し、スレッドダンプを取得できます。アプリケーションツリーからアプリケーションノードを右クリックし、[スレッドダンプ]を選択するだけです

0
Wiraj