2011-01-14 35 views
6

私はTomcatサーバー(Linux)上で実行しているJava Webアプリケーションを持っています。本番環境では、パフォーマンス上の問題があります。無作為な間隔で、tomcatが実行されているjsvcプロセスは、90〜100%のCPUで実行を開始します。私はこのイベントの引き金を見つけることができません。サーバーはクアッドコアシステムです。メモリ消費量は異常を示していません。Javaスレッドの実行を監視するツール

アプリケーションのどのスレッド(アプリケーションスタックトレース)が問題を引き起こしているかをどのように監視できますか?

私はjconsolePSI Probeをチェックしていますが、アプリケーション内のどのスレッドがCPU使用率の異常を引き起こしているかに関する詳細な情報は提供されていません。この場合

アプリケーションがデバッグにしたい挙動を示す(: -

+0

のですか? – skaffman

+0

@skaffman、申し訳ありません、java-performance、私はそれを修正しました。 –

+0

プロダクションサーバーにもパフォーマンス上の問題がありました。プロダクションサーバーをプロダクションサーバーに接続するのは難しいです。私たちはNewRelicに試しました。パフォーマンス調査を追加するための素晴らしいツールです。 – eSniff

答えて

5

これを(現象が発生した時間の長さに依存してもしなくてもよい、あなたのケースのために働く可能性がある)を行うための一つの比較的簡単な方法は、 、90から100パーセントのCPU使用)は、プロセスIDにjstack使用:

http://download.oracle.com/javase/6/docs/technotes/tools/share/jstack.html

が実行中で、どのような方法で、彼らが発生しているかのスレッド検討します。それを数回行うと、犯人のコールチェーンを見つけるのは比較的簡単です。その後、そのチェーンへの入り口をデバッグすることができます。

これは必ずしも最善の方法ではないが、これは非常に簡単で、必要なすべての方法があります。私はそこから始めるだろう。これは、 "printfは私がこれまで使ってきた最高のデバッガです"という哲学に似ています。

+3

また、JProfilerのようなプロファイラは、スレッドが何をしているのかについて多くのメトリックを与えるだろうが、問題を比較的単純であれば、これを追うことは非常に時間がかかるかもしれないと付け加えておきます。だから私は、適切なプロファイラーを起動する前に、いくつかの例を素早くjstackベースで分析することが順調であることを強調する。回答のためにVistaのおかげで – kvista

+0

。私はjstackを試してみるつもりです。 –

2

Javaアプリケーションのすべてのスレッドに対して、QUIT信号を送信することによって、スタックトレースダンプを取得できます。

kill -QUIT [processId] 

これはプロセス 'stdoutに表示されます。

1

ちょうど私の2セントですが、メモリの問題を実験していないのであれば、CPUのピークがGCアクティビティである可能性があります。したがって、jconsoleであなたのTomcatを監視している間は、メモリタブを見て、ヒープの使用量が高くないかどうかを確認してください。

4

VisualVMはあなたが探しているものです。新しいJDKが同梱されており、thread usageを監視することができます。

2

トップのCPUを消費するスレッドを示すためのもう1つのツールは、 `[javascriptのパフォーマンス]`タグとは何jvmtop

関連する問題