コア 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
。 - さらに情報が必要です。これらの詳細を正確かつ完全に解釈する方法が本当にわかりません。
添付ファイルをご覧ください。入力してください。