0

コア Java アプリケーションを分析/プロファイリングしようとしています。

Eclipse MATで JConsole を使用しています。

Perm-Gen グラフ (Windows XP マシンで 1 時間の期間に記録されたデータ) で次のことを確認しました。

コードキャッシュ:

  • 記録開始時:7MB
  • 1 時間後: 10.5 MB
  • グラフは次のようになります: 斜めの線がわずかに上がり、間隔を置いて増加します。

メモリ プール Perm-Gen(Shared-rw):

  • 記録開始時:7MB
  • 1時間後: 7MB
  • グラフは次のようになります: X 軸に平行。

メモリ プール Perm-Gen(Shared-r0):

  • 記録開始時:5.5MB
  • 1時間後:5.5MB
  • グラフは次のようになります: X 軸に平行。

メモリ プール:

  • 記録開始時:21MB
  • 1 時間後: 22.5 MB
  • グラフは次のようになります: 斜めの線がわずかに上昇/下降し、間隔を置いて増加します。

私の質問は、

  • 上記のカテゴリのそれぞれについて、Perm-Gen スペースのそのような動作を推測できるものは何ですか?
  • 上記の各カテゴリを探すのに理想的な動作は何ですか?

ここでの理想的な行動とは、以下を表す状態を指します。

  • アプリケーションのパフォーマンスは最高です。
  • アプリケーションにはメモリ関連の問題はありません。
  • リソースの使用率を改善するために、コードを改善する必要はありません。

上記の質問は、ヒープ スペース分析にも適用されます。

以下は、追加の説明です。

  • プロファイリングは本番環境と同じ環境で行う必要があるのは事実です。しかし、ここで本当のターゲットが何であるかを理解できれば、本当に役に立ちます。今のところ、私は同じことを学ぼうとしています。将来的には、本番環境でそれを実行しようとします。

  • また、2 つのコード ベース (リファクタリングされたものと古いもの) を比較しようとしています。リファクタリングによってどの程度の効果が得られるのか(定量データとして)知りたい。同じプラットフォームで結果を記録している場合、比較は成り立つと思います(本番または開発に関係なく)。

更新 1:

  • さらに、アプリケーションを 8 時間以上連続して実行しました。
  • GCViewer:1.31 を使用して GC 情報を取得しました。
  • GCViewerから収集したデータを添付しています。
  • 30 秒ごとに 1 つの FULL GC イベントが発生していることに気付きました。これは、多くのオブジェクトが であると結論付けていますlog-living
  • さらに情報が必要です。これらの詳細を正確かつ完全に解釈する方法が本当にわかりません。

添付ファイルをご覧ください。入力してください。

ここに画像の説明を入力

4

1 に答える 1

1

いくつかの提案:

1) JConsole を捨てる。VisualVM は JDK に含まれており、あらゆる点で優れています (また、ブリッジ モードが含まれているため、古いプラグインを使用することもできます)。

2) GC ロギングをオンに切り替えます。少なくとも次のフラグが必要です。

-Xloggc: (より包括的な GC ロギング用) -XX:+PrintGCDetails (より詳細な出力用) -XX:+PrintTenuringDistribution (JVM が想定する Tenuring しきい値を表示)

ログを分析するためのツールを見つけてください。PermGen だけでなく、オブジェクトのワーキング セットにも注意を払う必要があります。後者が主な関心事である場合でも同様です。GCViewer は無料であるか、商用ツールがあります (完全開示 - 私はこの目的のために Censum ツールを作成する jClarity で働いています)。

3) 1 時間よりずっと長く走る必要がある。多くのアプリケーションは、かなり長い間安定しません。

4) あなたの数字をもう一度見てみると、これは異常なことでも問題でもないように見えます。JVM のこのビットを調整するのはなぜですか? システムのどの側面が、これが深刻な問題であり、取り組む必要があることを示していますか? これをどのように判断し、この問題がどのように現れていますか?

于 2013-08-07T15:19:50.670 に答える