TOPシステム開発> ヒープの確認
サーバサイドプロファイリング
Javaサーバサイドプロファイリング

第3回:サーバサイドアプリケーションのプロファイリング

著者:野村総合研究所  松野 洋希   2007/10/2
前のページ  1  2   3  4  次のページ
ヒープの確認

   ここでは、「メモリー(ヒープ)」タブを表示させてみます。下のスクロールバーで過去の時間のデータを参照したり、左上にある虫眼鏡ボタンでグラフの拡大/縮小を行うことができます。

   それでは、スクロールバーを左に移動させ、起動直後のヒープの動きを見てみましょう。
メモリー(ヒープ)ビュー
図2:メモリー(ヒープ)ビュー
(画像をクリックすると別ウィンドウに拡大図を表示します)

   グラフを見ると、ヒープサイズが徐々に大きくなっていることがわかります。これはJavaVMが自動的にヒープを割り当てていることを意味します。アプリケーションの起動や、たまに処理が遅くなる場合は、ヒープメモリの自動割り当て処理が動いている可能性があります。アプリケーションサーバに割り当てるメモリのサイズが決まっている場合は、ヒープサイズの下限と上限をそのサイズに指定しておくと良いでしょう。


使用済みヒープの確認

   次に、ペットストアのアプリケーションにWebブラウザからアクセスしてみましょう。URLは「第1回:プロファイラとは」で解説したように、以下の通りになります。

http://サーバのIPアドレス/jpetstore/

   さて、Webブラウザからアプリケーションにアクセスしたとき、NetBeans Profilerの画面はどのように表示されるでしょうか。

Webブラウザでアクセス中のメモリー(ヒープ)ビュー
図3:Webブラウザでアクセス中のメモリー(ヒープ)ビュー
(画像をクリックすると別ウィンドウに拡大図を表示します)

   少し使用済みヒープが増えたようにみえます。しかし、単調増加ではなく、増えたり減ったりしているようです。ヒープが増えているのは、アプリケーションがオブジェクトを生成したためで、ヒープが減っているのはGCが発生してJavaVMが不要なオブジェクトをヒープから削除しているためです。

   ここで、グラフが以下の図4のようになったとします。

メモリリーク中のメモリー(ヒープ)ビュー
図4:メモリリーク中のメモリー(ヒープ)ビュー
(画像をクリックすると別ウィンドウに拡大図を表示します)

   これはGCが発生しているのにもかかわらず、使用済みヒープサイズがなかなか減っていない状況です。なぜなら、ヒープから削除してもよいとJavaVMが判断できるオブジェクトがないためです。

   GCについては、「メモリー(GC)」タブも併せて参照するとよいでしょう。「メモリー(GC)」や「メモリー(ヒープ)」画面を表示させたときに以下のような状態であれば、アプリケーションの実装やサーバの設定を見直す必要があります。

  • 生存中世代が一方的に増えている
  • 相対GC時間が一方的に増えている
  • GCが発生しているのに使用済みヒープサイズが小さくならない

表2:設定を見直すべき状況

   具体的には、以下のような対策が考えられます。

  • ヒープサイズを増やす
  • 巨大なオブジェクトをメモリに保持していないか確認する
  • メモリを無駄使いしているオブジェクトがないか調査する

表3:とるべき対策

前のページ  1  2   3  4  次のページ


株式会社野村総合研究所 松野 洋希
著者プロフィール
株式会社野村総合研究所  松野 洋希
情報技術本部  オープンソースソリューションセンター
大規模コンシューマ向けWebサイトのインフラ構築にあたり、オープンソースのフレームワークやミドルウェアの検証・評価に携わる。2003年、日本人としては初めてJBoss社の認定コンサルタントに合格。現在は、金融系システム基盤へオープンソースソフトウェアを適用するために設計・構築を行っている。

NRIオープンソースサポートサービス OpenStandia
http://www.nri-aitd.com/openstandia/


INDEX
第3回:サーバサイドアプリケーションのプロファイリング
  サーバサイドアプリケーションの解析
ヒープの確認
  メソッドの実行時間の確認
  ペットストアアプリケーションの動作を確認