5

アプリケーション サーバーの 1 つで、興味深い (非常に深刻な) 問題が発生しています。ある時点で、Web アプリケーションを実行している JVM の CPU 使用率が上昇し始め、最終的にアプリケーションの速度が低下するまで上昇し続けます。クロール。これを修正する唯一の方法は、アプリケーション サーバー ソフトウェアを再起動することです。

  • アプリケーション サーバー: Spring tc Server (サーバーは別の場所でホストされているため、正確なバージョンは現在わかりません)
  • アプリケーション: 比較的標準的な Spring 3 Web アプリケーション (ただし、JVM 内 EHCache を使用します)

これは私に簡単な質問をもたらします。これをトラブルシューティングするにはどうすればよいですか?

VisualVM (またはその他の JVM 監視ツール) の使用を検討しましたが、この特定のケースで彼らができる最善の方法は、スレッド ダンプを提供することです。何かが足りない)。

4

3 に答える 3

5

それが何をしているのかを知る必要がありますか?この問題の一般的な原因は、空きメモリが不足していることです。これが原因でない場合は、CPU プロファイラーが必要です。VisualVM は JDK に無料で付属しており、両方を行うことができます。

アプリケーションを常にプロファイリングすることはできません

jstackこのような場合は、数秒間隔で複数回呼び出してアドホック プロファイリングを実行できます。スタック トレースを使用するdiffと、ビジーで CPU を消費している可能性が高いスレッドを見つけることができます。

于 2013-01-30T11:10:21.200 に答える
4

フル GC が実行されている場合、CPU を消費するスレッドは、基本的にスタックまたはホギング スレッド、または GC アクティビティです。

UNIX ベースの環境を使用している場合は、以下を実行すると、JVM スレッドの使用率のプレビューが表示されます。(PID は jvm のプロセス ID です)。

prstat -L -p <PID> 

その後、スレッドダンプ ( kill -3 ) を取得し、prstat とスレッドダンプを相互に関連付けて、CPU 使用率が高いスレッドを見つけます。

スレッド ダンプの nid は、prstat の出力の LWPID の HEX 値に対応します。

Eg: LWPID = java/75 corresponds to nid = 0X4B

CPU を消費しているスレッドがスレッド ダンプで見つかると、調査を開始する場所へのポインターが使用可能になります。

さらに、プロファイラーの実行など: Jprofiler が役立ちます。

于 2013-01-30T11:18:12.463 に答える