2012-03-14 7 views
1

Linux + Java 6でスタンドアロンのJavaアプリケーションが実行されていますが、スタックされているようです(ログは生成されません)。 どうすればこのスレッドを使用せずにダンプできますか他のツール(例えば。jstackは)スタンドアロンJavaアプリケーションのスレッドダンプ

は、コマンドの下にしようとしましたが、彼らは私が何をしないのです何

kill -3 <pid> 
kill -QUIT <pid> 

をしていませんか?

+1

とった。 "Ctrl + \"は私にダンプを与えます。 –

+0

あなたのコメントを回答に変換し、それを自己承諾してください。 –

+0

'kill -3'も動作するはずです。これがうまくいかないのは、コンソールが見えないときだけです。 –

答えて

0

Java VisualVM(すべてのJDKのbinディレクトリに含まれています)を使用してJMXに接続できます。 JVMの起動パラメータ(リモートホスト)に

-Dcom.sun.management.jmxremote.port=PORT 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

を追加して認証を有効にするだけです。

次に、VisualVMをクライアントで起動し、接続を追加します。

こちらをご覧ください:http://visualvm.java.net/docindex.html

+0

リモートサーバーで作業していて、VisualVMがありません。 –

+0

リモートサーバーでは、上記のjmxサポートを有効にするだけです。クライアントがxserverを使用していませんか? – Stefan

0

jpsコマンド(必須ではないが)からPIDを取得します。

root権限で試しましたか? Javaプロセスがルート(またはデーモン)権限で開始された場合は、これを考慮する必要があります。

# kill -3 <pid> 
$ sudo kill -QUIT <pid> 

またH(ないh)を押してtop出力内のスレッドを見ることができます。

そして、スタックを識別できる場合は、pidを取得して16進数にしてから、jstackでスタックトレースを確認します。

よろしくお願いいたします。

+0

はルートではなく、そのプロセスの所有者と同じユーザーです。 –

+0

'kill -9'(SIGKILL)はどうでしょうか?それは無条件にプロセスを殺すでしょう。 –

+0

@ Christian.K彼はスレッドをダンプするのではなく、プロセスを終了することを望んでいると思う。 – ssedano

関連する問題