SlideShare a Scribd company logo
1 of 58
Download to read offline
Java VMへの処方箋
     VMへの処方箋
     ~先進のメモリ管理技術とは~




13-B-4   中島 恵
         株式会社 日立製作所 ソフトウェア事業部
         第2AP基盤ソフト設計部 担当部長
Contents
1.Javaのメモリ管理の課題とは
2. GC(ガベージコレクション)の仕組み
3. 「FullGCレス」を実現する最新技術
4. 「FullGCレス」の効果(デモンストレーション)
5. メモリトラブルを起こさないためには
Contents
1.Javaのメモリ管理の課題とは
2. GC(ガベージコレクション)の仕組み
3. 「FullGCレス」を実現する最新技術
4. 「FullGCレス」の効果(デモンストレーション)
5. メモリトラブルを起こさないためには
1.Javaのメモリ管理の課題とは


 Webシステムの安定性・堅牢性を高めるためには
Webシステムは、アプリケーションサーバおよびJavaによる
 開発生産性の向上によって、容易に構築が可能となった

    業務量ピーク時など、性能上のトラブルが後を絶たない



 システムの性能劣化につながる要因
1. CPUネック
            JavaVMのメモリ管理機能(GC)に起因
2. メモリネック
3. バックエンドシステムによるネック
                                                                      4
                         © Hitachi, Ltd. 2009. All rights reserved.
1.Javaのメモリ管理の課題とは



 Webシステムの扱うデータサイズの肥大化
 Webシステムが参照・更新するデータのサイズが
      どんどん大きくなってきている

  64ビット化で対処はできるが、メモリ領域サイズの
     増大に伴ってGCでの停止時間が長時間し、
       システム性能劣化に陥る



    JavaVMのメモリ管理機能(GC)に起因


                                                                   5
                      © Hitachi, Ltd. 2009. All rights reserved.
1.Javaのメモリ管理の課題とは



JavaVMのメモリ管理機能(GC)に起因した問題が山積




JavaVMのメモリ管理機能(GC)として、これらの問題を
解消する「次の一手」が、課題解決のためには必要

 JavaVMを大きく改良することによって、課題を解決する
 アプローチが見出せるのでは?

                                                                     6
                        © Hitachi, Ltd. 2009. All rights reserved.
Contents
1.Javaのメモリ管理の課題とは
2. GC(ガベージコレクション)の仕組み
3. 「FullGCレス」を実現する最新技術
4. 「FullGCレス」の効果(デモンストレーション)
5. メモリトラブルを起こさないためには
2. ガベージコレクションの仕組み


 ガベージコレクション(GC)とは…
  JavaVMが管理するメモリ領域中の使用済みのメモリ領域を破棄し、
  空き領域を作ること

                 使用領域
                                                           使用領域



                  GC
                                                            空き領域
使われなくなった領域
                 空き領域
     GC前のヒープ領域          GC後のヒープ領域




                                                                           8
                              © Hitachi, Ltd. 2009. All rights reserved.
2.ガベージコレクションの仕組み
  -Javaヒープとは-

Javaプロセスのメモリの内訳
                                                        スレッド
                                   Permヒープ   Cヒープ
              Javaヒープ                                   スタック
                                                    Permヒープはトランザクション処理中の
                                                    メモリ使用領域の変動が少ないため、
                   GCの対象
                                                        本セッションでは考慮しない


            New                              Old
    Eden           Survivor     業務プログラム使用領域
                                         J2EEサーバ New領域用
                (使用中のインスタン (年齢の古いインスタンスを が使う領域 の退避領域
 (できたてのインスタ
                           配置する領域)
 ンスを配置する領       スを配置する領域)
 域)


                              Javaアプリケーションが使用するメモリ領域
           •Javaヒープ
                              クラスなどのメタ情報を格納する領域
           •Permヒープ
                              JavaVMやCプログラムが使用するヒープ領域
           •Cヒープ
                              スレッドごとに保持するスタック領域
           •スレッドスタック


                                                                                                  9
                                                     © Hitachi, Ltd. 2009. All rights reserved.
2.ガベージコレクションの仕組み
 -CopyGCとFullGC-

GCには2種類ある
CopyGC…New領域を対象に、使用済みのインスタンスを全て削除する
      使用中のインスタンスは隣の領域へ移動する
         New                           Old
     Eden      S1   S2 業務プログラム使用領域   インスタンスの配置に利用できない領域


                                        使用中のものは隣
                                        の領域へ
Edenの領域がいっぱいになる
とCopyGCが起こる


FullGC…全ての領域を対象に、使用済みのインスタンスを全て削除する
         New                           Old
     Eden      S1   S2 業務プログラム使用領域    インスタンスの配置に利用できない領域




                     Oldの業務プログラム使用領域が
                     いっぱいになるとFullGCが起こる


                                                                                            10
                                               © Hitachi, Ltd. 2009. All rights reserved.
2.ガベージコレクションの仕組み
     -GCの問題点-

2つのGCの比較
         範囲    発生タイミング           実行にかかる時間
CopyGC New領域 Eden領域がいっぱいになった時 0.01~0.7秒
FullGC   全領域   Oldの業務プログラム使用領域   1秒~数十秒
               がいっぱいになった時                    ・FullGCは特に時間が
                                             かかる

GCはメモリの空き容量を確保するために必要な処理                     ・Javaヒープのサイズに
                                             より実行にかかる時間
                                             は増加する
しかし、GCが発生すると、GC実行中は業務処理が停止する


                           パラレルGC
                          GCアルゴリズムは
         ノーマルGC
                          複雑になるほど
              GCのアルゴリズムを変えて
                          コントロール不可と
                 対処してみる? なる
                        コンカレントGC    11
                                    © Hitachi, Ltd. 2009. All rights reserved.
2.ガベージコレクションの仕組み
     -GCの問題点-

2つのGCの比較
         範囲    発生タイミング           実行にかかる時間
CopyGC New領域 Eden領域がいっぱいになった時 0.01~0.7秒
FullGC   全領域   Oldの業務プログラム使用領域   1秒~数十秒
               がいっぱいになった時                    ・FullGCは特に時間が
                                             かかる

GCはメモリの空き容量を確保するために必要な処理                     ・Javaヒープのサイズに
                                             より実行にかかる時間
                                             は増加する
しかし、GCが発生すると、GC実行中は業務処理が停止する



          FullGCの発生を抑止することを目的に
                 発想の転換を行った
         メモリ領域を1つの枠組みで管理することに
               そもそも無理があるのでは?
                                                                                 12
                                    © Hitachi, Ltd. 2009. All rights reserved.
2.ガベージコレクションの仕組み
 -明示管理ヒープ方式の位置付け-

                     ■GC方式
  ■ヒープ管理方式

 世代別ヒープ管理方式          ノーマルGC
   (世代別GC方式)
                     パラレルGC
       +       NEW
                     コンカレントGC
 明示管理ヒープ方式
           特許出願済


GCアルゴリズムの変更ではFullGC発生は回避不可のため、
     ヒープ管理方式として明示管理ヒープ方式
   (Explicit Heap方式:略称Eヒープ方式)を開発!
                                                                      13
                         © Hitachi, Ltd. 2009. All rights reserved.
2.ガベージコレクションの仕組み
-安定時のメモリ使用状況(グラフ)-



             Javaヒープ領域の使用量




                 FullGC発生なし




          安定時のグラフ (非月末)
                                                                          14
                             © Hitachi, Ltd. 2009. All rights reserved.
2.ガベージコレクションの仕組み
     -GC多発時のメモリ使用状況(グラフ)-



                       Javaヒープ領域の使用量

10~15秒おきに1回FullGC発生。
1回あたりのGC処理時間が3~4秒。




                       GC多発時のグラフ(月末)
                                                                                    15
                                       © Hitachi, Ltd. 2009. All rights reserved.
Contents
1.Javaのメモリ管理の課題とは
2. GC(ガベージコレクション)の仕組み
3. 「FullGCレス」を実現する最新技術
4. 「FullGCレス」の効果(デモンストレーション)
5. メモリトラブルを起こさないためには
3. 「FullGCレス」を実現する最新技術
     -ヒープ領域ごとの用途-


  New領域およびOld領域に格納されるインスタンスの違いに着目

                               New                                  Old
                                                      業務プログラム使用領域 JavaEEサーバ New領域用の
                     Eden                Survivor
Javaヒープ                                                           が使う領域
                                                                            退避領域
構成

格納される         短命なインスタンス                                                                 New領域用の
                                                                      JavaEEサーバ
                                                      長命なインスタンス       が使う領域
インスタンス                                                                                  退避領域
             (トランザクション処理で                               (セッション情報)
             使用するメモリなど)


                       Web/APサーバ                                                 DBサーバ
                                                                                 DBサーバ
          トランザクション
                                                    JavaEEサーバ
                            Web Server
             ログイン
                                                      セッション
             商品表示
                                                       情報A
             商品購入
  クライアント
             ログアウト



                                                         業務プログラム
                                                         業務プログラム
  クライアント


                                                                                                                 17
                                                                    © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術
     -ヒープ領域ごとの用途-


  New領域およびOld領域に格納されるインスタンスの違いに着目

                         New                                  Old
                                                業務プログラム使用領域 JavaEEサーバ New領域用の
               Eden                Survivor
Javaヒープ                                                     が使う領域
                                                                      退避領域
構成

格納される       短命なインスタンス                                                             New領域用の
                                                                JavaEEサーバ
                                                長命なインスタンス       が使う領域
インスタンス                                                                            退避領域
           (トランザクション処理で                           (セッション情報)
           使用するメモリなど)


                 Web/APサーバ                                                 DBサーバ
                                                                           DBサーバ
                                               ログアウト後も
                                              JavaEEサーバ
                      Web Server

                                                  残存
  クライアント




                                                   業務プログラム
                                                   業務プログラム
  クライアント


                                                                                                           18
                                                              © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術
     -ヒープ領域ごとの用途-


  New領域およびOld領域に格納されるインスタンスの違いに着目

                         New                                  Old
                                                業務プログラム使用領域 JavaEEサーバ New領域用の
               Eden                Survivor
Javaヒープ                                                     が使う領域
                                                                      退避領域
構成

格納される       短命なインスタンス                                                             New領域用の
                                                                JavaEEサーバ
                                                長命なインスタンス       が使う領域
インスタンス                                                                            退避領域
           (トランザクション処理で                           (セッション情報)
           使用するメモリなど)


                   Web/APサーバ                                               DBサーバ
                                                                           DBサーバ
                                              JavaEEサーバ
                      Web Server


  クライアント

           ログイン                                 セッション
                                                 情報B
           商品表示
           ログアウト
                                                   業務プログラム
                                                   業務プログラム
  クライアント


                                                                                                           19
                                                              © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術
     -ヒープ領域ごとの用途-


  New領域およびOld領域に格納されるインスタンスの違いに着目

                         New                                  Old
                                                業務プログラム使用領域 JavaEEサーバ New領域用の
               Eden                Survivor
Javaヒープ                                                     が使う領域
                                                                      退避領域
構成

格納される       短命なインスタンス                                                             New領域用の
                                                                JavaEEサーバ
                                                長命なインスタンス       が使う領域
インスタンス                                                                            退避領域
           (トランザクション処理で                           (セッション情報)
           使用するメモリなど)


                 Web/APサーバ                                                 DBサーバ
                                                                           DBサーバ
                                              JavaEEサーバ
                      Web Server


                          ログオフ後もセッション情報が
  クライアント

                          残存、蓄積してFullGCが発生
                                                   業務プログラム
                                                   業務プログラム
  クライアント


                                                                                                           20
                                                              © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術
           -Full GCレスでStop The Worldを解消!-
                                                                  業界初!(*)
       Full GCによるオンライン業務の一時的な停止は、
                                                              Full GCレスを実現
       何とかならないものだろうか・・・

             Webアプリケーションの変更無く、Full GCの発生を抑止。
  ポイント
             Full GCによるオンライン業務の一時停止を解消します。
                                                                             ログオフ後も
                                                                         セッション情報が残存。
                                従来方式
 応答時間(秒)                                                                  Full GCで解放。
15.0                     ログイン
                                                   セッションオブジェクト
                         商品表示
10.0
                                                                                    Full GC
                         商品購入     New領域                                              発生
 5.0                                                    Old領域
                         ログオフ
               時間                             Javaヒープ
                                                               GC対象外である
                                                               Eヒープ領域に配置し
                    応答なし・・・                                    Full GC発生を抑止
 応答時間(秒)
                                新方式
15.0

10.0
                                  New領域     Old領域
 5.0
                     快適!                                   Eヒープ領域
                                     Javaヒープ
               時間

                                (*)・・・弊社調べ 2008年10月時点                                                21
                                                        © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術
    -FullGCレス機能適用時の動き-


                           New                                Old
                                                  業務プログラム使用領域 J2EEサーバ New領域用の
                 Eden                Survivor
Javaヒープ
                                                  長命なインスタンス が使う領域 退避領域
            短命なインスタンス




                   Web/APサーバ                                               DBサーバ
                                                                           DBサーバ
      トランザクション
                                                J2EEサーバ
                        Web Server
           ログイン
                                                 セッション
           商品表示
                                                  情報A
           商品購入
  クライアント




                                                    業務プログラム
                                                    業務プログラム
  クライアント



                                                                                                           22
                                                              © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術
    -FullGCレス機能適用時の動き-


                           New                                     Old
                                                  業務プログラム使用領域 J2EEサーバ New領域用の
                 Eden                Survivor
Javaヒープ
                                                  長命なインスタンス が使う領域 退避領域
            短命なインスタンス




                                        Eヒープ領域            セッション
                                                          オブジェクト




                   Web/APサーバ                                                    DBサーバ
                                                                                DBサーバ
      トランザクション
                                                J2EEサーバ
                        Web Server
           ログイン
                                                 セッション
           商品表示
                                                  情報A
           商品購入
  クライアント
           ログアウト



                                                    業務プログラム
                                                    業務プログラム
  クライアント



                                                                                                                23
                                                                   © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術
    -FullGCレス機能適用時の動き-


                         New                                     Old
                                                業務プログラム使用領域 J2EEサーバ New領域用の
               Eden                Survivor
Javaヒープ
                                                長命なインスタンス が使う領域 退避領域
            短命なインスタンス




                                                                        セッション
                                      Eヒープ領域            セッション
                                                                        オブジェクト
                                                        オブジェクト




                   Web/APサーバ                                                  DBサーバ
                                                                              DBサーバ
                                              J2EEサーバ
                      Web Server


  クライアント



           ログイン                                 セッション
                                                 情報B
           商品表示                                   業務プログラム
                                                  業務プログラム
  クライアント
           ログアウト



                                                                                                              24
                                                                 © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術
    -FullGCレス機能適用時の動き-


                    New                          Old
                                     業務プログラム使用領域 J2EEサーバ New領域用の
             Eden         Survivor
Javaヒープ
                                     長命なインスタンス が使う領域 退避領域
           短命なインスタンス




                                                        セッション
                             Eヒープ領域
                                                        オブジェクト


                         セッション情報が蓄積せず
                            FullGCレス!
               Web/APサーバ               DBサーバ
                                       DBサーバ
                               J2EEサーバ
                 Web Server


  クライアント




                                      業務プログラム
                                      業務プログラム
  クライアント



                                                                                              25
                                                 © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                                             特許出願済
     -FullGCレス機能の仕組みとは-

                                                            メモリ領域
            業務プログラム                            Cosminexus                                   Eヒープ
(1)セッションの生成                                   セッションの割り当て
HttpSession session = request.getSession();
                                              明示管理ヒープ
                                              領域確保

(2)オブジェクトの生成およびセッションへの
   オブジェクトの格納
 Object obj1 = new UserObject1();
 session.setAttribute(Key1, obj1);


(3)オブジェクトの生成およびセッションへの
   オブジェクトの格納
Object obj2 = new UserObject2();
session. setAttribute(Key2, obj2);


(4)セッションの終了
 session.invalidate();


                                                                                                            26
                                                               © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                                            特許出願済
     -FullGCレス機能の仕組みとは-

                                                           メモリ領域
            業務プログラム                           Cosminexus                                   Eヒープ
(1)セッションの生成
HttpSession session = request.getSession();
                                                            New領域

(2)オブジェクトの生成およびセッションへの
   オブジェクトの格納
 Object obj1 = new UserObject1();
 session.setAttribute(Key1, obj1);


(3)オブジェクトの生成およびセッションへの
   オブジェクトの格納
Object obj2 = new UserObject2();
session. setAttribute(Key2, obj2);


(4)セッションの終了
 session.invalidate();


                                                                                                           27
                                                              © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                                             特許出願済
     -FullGCレス機能の仕組みとは-

                                                            メモリ領域
            業務プログラム                            Cosminexus                                   Eヒープ
(1)セッションの生成
HttpSession session = request.getSession();
                                                             New領域

(2)オブジェクトの生成およびセッションへの
                                              Obj1とセッション
   オブジェクトの格納                                を関連付け
 Object obj1 = new UserObject1();
 session.setAttribute(Key1, obj1);

(3)オブジェクトの生成およびセッションへの
   オブジェクトの格納
Object obj2 = new UserObject2();
session. setAttribute(Key2, obj2);


(4)セッションの終了
 session.invalidate();


                                                                                                            28
                                                               © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                                            特許出願済
     -FullGCレス機能の仕組みとは-

                                                           メモリ領域
            業務プログラム                           Cosminexus                                   Eヒープ
(1)セッションの生成
HttpSession session = request.getSession();
                                                            New領域

(2)オブジェクトの生成およびセッションへの
   オブジェクトの格納
 Object obj1 = new UserObject1();
 session.setAttribute(Key1, obj1);                         CopyGCで移動

(3)オブジェクトの生成およびセッションへの
   オブジェクトの格納
Object obj2 = new UserObject2();
session. setAttribute(Key2, obj2);


(4)セッションの終了
 session.invalidate();


                                                                                                           29
                                                              © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                                            特許出願済
     -FullGCレス機能の仕組みとは-

                                                           メモリ領域
            業務プログラム                           Cosminexus                                   Eヒープ
(1)セッションの生成
HttpSession session = request.getSession();
                                                            New領域

(2)オブジェクトの生成およびセッションへの
   オブジェクトの格納
 Object obj1 = new UserObject1();
 session.setAttribute(Key1, obj1);                         CopyGCで移動

(3)オブジェクトの生成およびセッションへの
   オブジェクトの格納
Object obj2 = new UserObject2();
session. setAttribute(Key2, obj2);


(4)セッションの終了
 session.invalidate();


                                                                                                           30
                                                              © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                                            特許出願済
     -FullGCレス機能の仕組みとは-

                                                           メモリ領域
            業務プログラム                           Cosminexus                                   Eヒープ
(1)セッションの生成
HttpSession session = request.getSession();



(2)オブジェクトの生成およびセッションへの
   オブジェクトの格納
 Object obj1 = new UserObject1();
 session.setAttribute(Key1, obj1);

                                                            New領域
(3)オブジェクトの生成およびセッションへの
   オブジェクトの格納
Object obj2 = new UserObject2();
session. setAttribute(Key2, obj2);


(4)セッションの終了
 session.invalidate();


                                                                                                           31
                                                              © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                                             特許出願済
     -FullGCレス機能の仕組みとは-

                                                            メモリ領域
            業務プログラム                            Cosminexus                                   Eヒープ
(1)セッションの生成
HttpSession session = request.getSession();



(2)オブジェクトの生成およびセッションへの
   オブジェクトの格納
 Object obj1 = new UserObject1();
 session.setAttribute(Key1, obj1);

                                                             New領域
(3)オブジェクトの生成およびセッションへの
                                              Obj2とセッション
   オブジェクトの格納
                                              を関連付け
Object obj2 = new UserObject2();
session. setAttribute(Key2, obj2);


(4)セッションの終了
 session.invalidate();


                                                                                                            32
                                                               © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                                             特許出願済
     -FullGCレス機能の仕組みとは-

                                                            メモリ領域
            業務プログラム                           Cosminexus                                    Eヒープ
(1)セッションの生成
HttpSession session = request.getSession();



(2)オブジェクトの生成およびセッションへの
   オブジェクトの格納
 Object obj1 = new UserObject1();
 session.setAttribute(Key1, obj1);

                                                             New領域
(3)オブジェクトの生成およびセッションへの
   オブジェクトの格納
Object obj2 = new UserObject2();
session. setAttribute(Key2, obj2);
                                                           CopyGCで移動

(4)セッションの終了
 session.invalidate();


                                                                                                            33
                                                               © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                                             特許出願済
     -FullGCレス機能の仕組みとは-

                                                            メモリ領域
            業務プログラム                           Cosminexus                                    Eヒープ
(1)セッションの生成
HttpSession session = request.getSession();



(2)オブジェクトの生成およびセッションへの
   オブジェクトの格納
 Object obj1 = new UserObject1();
 session.setAttribute(Key1, obj1);

                                                             New領域
(3)オブジェクトの生成およびセッションへの
   オブジェクトの格納
Object obj2 = new UserObject2();
session. setAttribute(Key2, obj2);
                                                           CopyGCで移動

(4)セッションの終了
 session.invalidate();


                                                                                                            34
                                                               © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                                             特許出願済
     -FullGCレス機能の仕組みとは-

                                                            メモリ領域
            業務プログラム                            Cosminexus                                   Eヒープ
(1)セッションの生成
HttpSession session = request.getSession();



(2)オブジェクトの生成およびセッションへの
   オブジェクトの格納
 Object obj1 = new UserObject1();
 session.setAttribute(Key1, obj1);


(3)オブジェクトの生成およびセッションへの
   オブジェクトの格納
Object obj2 = new UserObject2();
session. setAttribute(Key2, obj2);


                                              明示管理ヒープ
(4)セッションの終了
                                              領域削除
session.invalidate();

   アプリ変更無しにセッションオブジェクトをEヒープで管理                                                                          35
                                                               © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                   特許出願済
  -「Eヒープ領域削除」の堅牢化-

  削除するEヒープ内に共通データなど使用中データが存在する場合
    単純な削除ではトラブル(領域外参照)が発生

                      Javaヒープ領域
     Eヒープ領域
                                                          Old
                        New




   誤って領域削除
単純な削除ではアベンド発生!




                                                                               36
                                  © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                   特許出願済
-「Eヒープ領域削除」の堅牢化-

削除するEヒープ内に共通データなど使用中データが存在する場合
  単純な削除ではトラブル(領域外参照)が発生

                    Javaヒープ領域
   Eヒープ領域
                                                        Old
                      New




 誤って領域削除

                             領域削除時に使用中
                            オブジェクトを検出して移動




                                                                             37
                                © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                   特許出願済
-「Eヒープ領域削除」の堅牢化-

削除するEヒープ内に共通データなど使用中データが存在する場合
  単純な削除ではトラブル(領域外参照)が発生

                    Javaヒープ領域
   Eヒープ領域
                                                        Old
                      New




 誤って領域削除

                             領域削除時に使用中
                            オブジェクトを検出して移動




                                                                             38
                                © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                   特許出願済
 -「Eヒープ領域削除」の堅牢化-

 削除するEヒープ内に共通データなど使用中データが存在する場合
   単純な削除ではトラブル(領域外参照)が発生

                     Javaヒープ領域
    Eヒープ領域
                                                         Old
                       New




  誤って領域削除

                              領域削除時に使用中
                             オブジェクトを検出して移動


Eヒープ内に使用中データが存在する場合にはJavaヒープへの移動を
行い、そのEヒープを削除してしまっても問題なく動作
    システム堅牢性を確保
                                                                              39
                                 © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                  特許出願済
    -FullGCレス機能適用時のオーバヘッド-

  FullGCレス機能適用時CopyGC処理のコスト
              → 従来のCopyGC処理時間の最大30%増
                       Javaヒープ領域
         Eヒープ領域
                                                           Old
                          New
CopyGC
処理前




                       CopyGC

CopyGC                                                     Old
                          New
処理後




         CopyGC時にEヒープ領域への移動候補の解析及び
         移動先がJavaヒープかEヒープかの移動先判定を行う
                                                                                40
                                   © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                         特許出願済
    -FullGCレス機能適用時のオーバヘッド-


[単価極小(数十ms~数百ms)のCopyGCに対して30%増のオーバヘッドのみ]
  FullGCの停止処理コストを広く浅くオンライン業務処理全域に割り振るのではなく、
  FullGCの停止処理コストを広く浅くオンライン業務処理全域に割り振るのではなく、
  FullGC対象領域を縮小させる という抜本的な方式のため、処理全体に占める増加
  FullGC対象領域を縮小させる という抜本的な方式のため、処理全体に占める増加
  オーバーヘッドはCopyGCオーバヘッド増という限定されたものとなる。
  オーバーヘッドはCopyGCオーバヘッド増という限定されたものとなる。


  [CopyGC時間増によるスループット劣化の試算例]
  [CopyGC時間増によるスループット劣化の試算例]
    測定単位時間:10:00~15:45(20700秒)
    測定単位時間:10:00~15:45(20700秒)
                                 平均CopyGC時間:0.328秒/回 (30%増)
    CopyGC回数:1658回
    CopyGC回数:1658回
                                 処理件数:545486件 (0.61%劣化)
                                      →処理性能への影響
    平均CopyGC時間:0.253秒/回
    平均CopyGC時間:0.253秒/回
                                                                 1%未満
    処理件数:548819件
    処理件数:548819件




                                                                                       41
                                          © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術                                   特許出願済
 -FullGCレス機能の効果例-

Cosminexus動作時のメモリ使用量変化: A銀行殿縮小模擬環境
          動作時のメモリ使用量
                        FullGCの発生で
120
                      全業務が一時的に停止
         従来    V8以降
100

 80

 60

 40

 20                    V8以降は
                    FullGC発生せず
  0
     「FullGCレス」を実現!
  GC対象外領域でメモリ大容量化対応!                                                          42
                                 © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術
     -Cosminexusでしか実現できない理由-

                    業務アプリケーション

                                                セッションオブジェクトを
    JavaEEサーバと       JavaEEサーバ                   自動Eヒープ化
 JavaVMの連携により
業務アプリの変更無しに
   「FullGCレス」を
   「FullGCレス」
    実現可能に!                Java VM                 Eヒープ領域を追加



            従来方式
                                  セッションオブジェクト
                  New領域                 Old領域
                              Javaヒープ

            新方式
                  New領域   Old領域
                    Javaヒープ              Eヒープ領域
                                                                                               43
                                                  © Hitachi, Ltd. 2009. All rights reserved.
3. 「FullGCレス」を実現する最新技術
-Cosminexusでしか実現できない理由-

                業務アプリケーション
                Cosminexusのサポート
                プラットフォーム全てで
                   JavaEEサーバ
                「FullGCレス」を実現!
                「FullGCレス」
                                              全プラットフォームに
                   日立Java VM                  独自JavaVMを開発
                                                              (Cosminexus V5より)




                             OS

      HP-UX                                            Solaris
                   Windows     Linux    AIX

                     ハードウェア

        Power                                 Sparc
                  Itanium     x86/x64
                                                                                             44
                                                © Hitachi, Ltd. 2009. All rights reserved.
Contents
1.Javaのメモリ管理の課題とは
2. GC(ガベージコレクション)の仕組み
3. 「FullGCレス」を実現する最新技術
4. 「FullGCレス」の効果(デモンストレーション)
5. メモリトラブルを起こさないためには
4. 「FullGCレス」の効果(デモンストレーション)
   -デモンストレーションの構成-
         現実のシステムでは、多くのユーザがサーバにログインします。




                           Web/APサーバ
                                                        <従来>
                                                        Javaヒープに
         ユーザ                                            セッションの
                                                        ゴミが溜まる。



                           Web    J2EEサーバ
                                                     Javaヒープ
                           サーバ   業務アプリ                セッション
多くのユーザ
                                  業務アプリ                セッション

                                                       セッション
                                  業務アプリ
 ログイン/
ログアウトが
行われている


                                                                                 46
                                    © Hitachi, Ltd. 2009. All rights reserved.
4. 「FullGCレス」の効果(デモンストレーション)
-デモンストレーションの構成-
 ここでは、シミュレータを使って多くの仮想ユーザでログインします。

                <従来>
                FullGCが実行されると、
                  突然応答が遅くなっ
                        た!
                          Web/APサーバ
                                                       <従来>
                                                       Javaヒープに
   利用者                                                 セッションの
                                                       ゴミが溜まる。



                          Web    J2EEサーバ
                                                    Javaヒープ
                          サーバ   業務アプリ                セッション

                                 業務アプリ                セッション
  仮想ユーザ                                               セッション
               ログイン/             業務アプリ
(Webシミュレータ)   ログアウトを
                繰り返す


                                                                                47
                                   © Hitachi, Ltd. 2009. All rights reserved.
4. 「FullGCレス」の効果(デモンストレーション)
  -デモンストレーションの内容-
従来方式                           FullGCレス
                                                    Web/J2EEサーバ2
              Web/J2EEサーバ1
   jconsole                         jconsole                         GC対象外
                                                     Javaヒープ
                 Javaヒープ
                                                                       領域
                                                                        セッション
                      セッション
                                                                        セッション
                      セッション
                                                                        セッション
                      セッション

                                      アクセス            ログイン&
    アクセス      ログイン&
                                                      ログアウト
              ログアウト




          ブラウザ(画面)                             ブラウザ(画面)
          時間:○○[ms]           比較               時間:××[ms]




                                                                                               48
                                                  © Hitachi, Ltd. 2009. All rights reserved.
4. 「FullGCレス」の効果(デモンストレーション)




      スクリーンをご覧ください。




                                                                         49
                            © Hitachi, Ltd. 2009. All rights reserved.
4. 「FullGCレス」の効果(デモンストレーション)
     -デモンストレーションの結果まとめ-
従来方式                      FullGCレス


                                     50MB弱

              FullGC

130~180MB




              10.48秒                              0.85秒

    「FullGCレス」によりレスポンス遅延解消!
                                                                                    50
                                       © Hitachi, Ltd. 2009. All rights reserved.
Contents
1.Javaのメモリ管理の課題とは
2. GC(ガベージコレクション)の仕組み
3. 「FullGCレス」を実現する最新技術
4. 「FullGCレス」の効果(デモンストレーション)
5. メモリトラブルを起こさないためには
5.メモリトラブルを起こさないためには
   -パフォーマンス見積もりシート-
「パフォーマンス見積もりシート」を用いてラクラク見積もり
 赤枠の項目の一部を入力すると、必要なメモリサイズ、CPU数などを自動サイジング




              Cosminexus 認定資格講座より
              http://www.hitachi.co.jp/Prod/comp/soft1/certification/cosminexus/kouza.html                  52
                                                               © Hitachi, Ltd. 2009. All rights reserved.
5.メモリトラブルを起こさないためには
   -メモリリーク-
メモリリークとは…
プログラマが予想しないところでオブジェクトの参照が残ってしまい、
GCを行っても解放されないオブジェクトが継続的に増加してしまうこと

              Javaヒープ領域の使用量

                   -Xmxの指定値




                              OutOfMemoryError
                              (メモリ不足)発生




                                                                                53
                                   © Hitachi, Ltd. 2009. All rights reserved.
5.メモリトラブルを起こさないためには
          -メモリリーク原因の特定- 「ヒーププロファイル機能」
 メモリリークしているが、原因が特定できない。
              メモリの解放モレ(オブジェクト参照の解除モレ)の原因を容易に追求する
              ことが可能になります。
              JavaVM自身で情報出力を行うため、高い精度で解析を行うことが可能です。
ポイント          通常実行時のオーバヘッドはゼロ。
              情報取得時のオーバヘッドはFullGC1回分程度の低オーバヘッド。
              サーバーを再起動することなく情報を取得できます。

                                                  Java VMメモリ空間
  ①領域単位のメモリ                                                                                   ②領域を保持している
   消費量の把握                                                                                      モジュールを把握
                                                                   モジュール1
                                              領域a
       領域aが多くの                                                                                     モジュール1が領域a
     メモリを消費している                                                                                     を保持している。
                                                                     モジュール2
                                                             領域b
      ことを確認します。                                                                                    →仕様/バグを調査

                                 ※ 実際は領域/モジュールともJavaのクラスインスタンスになります。


 Total Size of Instances                                             Reference of class classC
 Total Size of Instances
                                                                                                     classCをポイントしている
                                                                     Reference of class classC
 -----------------------                                             -------------------------
 -----------------------                                             -------------------------
                                                                                                     すべてのクラスが一覧とし
 ___________Size__Instances__Class________________                   classA(0x10766840)[Eden]
 ___________Size__Instances__Class________________                   classA(0x10766840)[Eden]
                                                                                                     て出力されます。ヒープ領
         1437424      15809 [Ljava.lang.Class;                         classX(0x10766998)[Eden]
         1437424      15809 [Ljava.lang.Class;                         classX(0x10766998)[Eden]
          525120       7408 java.util.HashMap$Entry                                                  域名も表示します
                                                                     ------
          525120       7408 java.util.HashMap$Entry                  ------
          502000       7094 java.util.HashMap                        classB(0x10766840)[Eden]
          502000       7094 java.util.HashMap                        classB(0x10766840)[Eden]
          500248       7012 [Ljava.util.HashMap$Entry;                 classC(0x10766858)[Tenured]
          500248       7012 [Ljava.util.HashMap$Entry;                 classC(0x10766858)[Tenured]
          486336       4017 java.lang.ref.SoftReference                  classD(0x10766968)[Eden]
          486336       4017 java.lang.ref.SoftReference                  classD(0x10766968)[Eden]
          394760       4658 java.util.HashSet                              classX(0x10766a28)[Survivor]
          394760       4658 java.util.HashSet                               classX(0x10766a28)[Survivor]
          394328       4648 java.lang.Shutdown$WrappedHook           ------
          394328       4648 java.lang.Shutdown$WrappedHook           ------
 …                                                                   classE(0x10766840)[Eden]
 …                                                                   classE(0x10766840)[Eden]
                                                                       classA(0x10766920)[Survivor]
                                                                       classA(0x10766920)[Survivor]
                                                                         classX(0x06aa0020)[EM(eid=1)]
                                                                         classX(0x06aa0020)[EM(eid=1)]
                                                                                                                                        54
                                                                                           © Hitachi, Ltd. 2009. All rights reserved.
5.メモリトラブルを起こさないためには
           -FullGC発生によるスローダウンの回避-

     FullGC発生によるスローダウンを事前に検知して回避したい。
            FullGCの発生を事前に検知し自律的に再起動することで、トラブルを
            未然に防止。
ポイント
            セッション情報を引継ぐため,業務を継続することができる。


                             Full GCの
                             予兆あり!                           自律的に
    正常運転
                                                           サーバを再起動して
                                                             問題を回避
                                        セセ
                          サーバA
                                        ッッ
                                        シシ              プロセス
                                                        プロセス
                      負
              セッション
              セッション                     ョョ              再起動
                      荷                                  再起動
                                        ンン
               の保存
               の保存    分                 管管
                          サーバB
                      散                 理理
                      機                                                                  セセ
                 セセ
       サーバA                                                   サーバA                       ッッ
                 ッッ                                                                      シシ
                 シシ                                 負                                    ョョ
負
                 ョョ                                                                      ンン
                                                    荷
荷                ンン                                                                      管管
                                                    分
分                管管                                                                      理理
                                                              サーバB
       サーバB                                         散
散                理理
                                                    機
機

                                              振分け
                                              振分け                                    セッション
                                                                                     セッション
                                             定義変更
                                             定義変更                                     の回復
                                                                                      の回復
                                                                                                     55
                                                        © Hitachi, Ltd. 2009. All rights reserved.
まとめ


Cosminexus V8は、Webシステムの“Stop the world”
解消のために「FullGCレス」を実現する機能を新たに
搭載した。アプリの変更なく、誰でも恩恵を享受できる。
Cosminexus 日立JavaVMの明示管理ヒープと、アプリ
ケーションサーバとの密連携という高度な独自技術の結晶
として、 「FullGCレス機能」は実現されている。
メモリリークなどのアプリ不良によって、メモリトラブルが
発生する場合もある。これについての調査方法は確立
されており、トラブルを暫定回避する機能もある。


                                                                         56
                            © Hitachi, Ltd. 2009. All rights reserved.
END
END
他社所有名称に対する表示

Cosminexus ホームページ
http://www.hitachi.co.jp/cosminexus/
http://www.cosminexus.com/
Cosminexus 認定資格講座
http://www.hitachi.co.jp/Prod/comp/soft1/certification/cosminexus/kouza.html

謝辞および他社所有名称に対する表示
 《他社所有名称に対する表示》
 •Java 及びすべてのJava関連の商標及びロゴは,米国及びその他の国における米国Sun Microsystems, Inc.の商標または登録商標です。
 •その他記載の会社名、製品名は、それぞれの会社の商号、商標もしくは登録商標です。




                                                                                                                  58
                                                                     © Hitachi, Ltd. 2009. All rights reserved.

More Related Content

What's hot

Amazon Web Services の本気がみたいか !? スピードと高可用性を両立したゲームインフラの構築と事例
Amazon Web Services の本気がみたいか !? スピードと高可用性を両立したゲームインフラの構築と事例Amazon Web Services の本気がみたいか !? スピードと高可用性を両立したゲームインフラの構築と事例
Amazon Web Services の本気がみたいか !? スピードと高可用性を両立したゲームインフラの構築と事例Amazon Web Services Japan
 
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Masashi Umezawa
 
待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイント待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイントMasayuki Ozawa
 
MySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことMySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことyoku0825
 
はりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみたはりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみたuchan_nos
 
Gangliaはじめました
GangliaはじめましたGangliaはじめました
Gangliaはじめましたyuzorock
 
マイクロサービスアーキテクチャの設計 - JUG2015
マイクロサービスアーキテクチャの設計 - JUG2015マイクロサービスアーキテクチャの設計 - JUG2015
マイクロサービスアーキテクチャの設計 - JUG2015Yusuke Suzuki
 
ストリーム処理勉強会 大規模mqttを支える技術
ストリーム処理勉強会 大規模mqttを支える技術ストリーム処理勉強会 大規模mqttを支える技術
ストリーム処理勉強会 大規模mqttを支える技術Keigo Suda
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話Kazuho Oku
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメYoji Kanno
 
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...Google Cloud Platform - Japan
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試したy-uti
 
MySQLerの7つ道具
MySQLerの7つ道具MySQLerの7つ道具
MySQLerの7つ道具yoku0825
 
データモデリング入門2021
データモデリング入門2021データモデリング入門2021
データモデリング入門2021Koichi Inami
 
ZOZOTOWNのマルチクラウドへの挑戦と挫折、そして未来
ZOZOTOWNのマルチクラウドへの挑戦と挫折、そして未来ZOZOTOWNのマルチクラウドへの挑戦と挫折、そして未来
ZOZOTOWNのマルチクラウドへの挑戦と挫折、そして未来Hiromasa Oka
 
MySQL Fabricでぼっこぼこにされたはなし
MySQL FabricでぼっこぼこにされたはなしMySQL Fabricでぼっこぼこにされたはなし
MySQL Fabricでぼっこぼこにされたはなしyoku0825
 
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)Shinya Sugiyama
 
Java でつくる 低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧Java でつくる低レイテンシ実装の技巧
Java でつくる 低レイテンシ実装の技巧 Ryosuke Yamazaki
 

What's hot (20)

Amazon Web Services の本気がみたいか !? スピードと高可用性を両立したゲームインフラの構築と事例
Amazon Web Services の本気がみたいか !? スピードと高可用性を両立したゲームインフラの構築と事例Amazon Web Services の本気がみたいか !? スピードと高可用性を両立したゲームインフラの構築と事例
Amazon Web Services の本気がみたいか !? スピードと高可用性を両立したゲームインフラの構築と事例
 
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
 
待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイント待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイント
 
MySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことMySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいこと
 
Metaspace
MetaspaceMetaspace
Metaspace
 
はりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみたはりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみた
 
Gangliaはじめました
GangliaはじめましたGangliaはじめました
Gangliaはじめました
 
マイクロサービスアーキテクチャの設計 - JUG2015
マイクロサービスアーキテクチャの設計 - JUG2015マイクロサービスアーキテクチャの設計 - JUG2015
マイクロサービスアーキテクチャの設計 - JUG2015
 
ストリーム処理勉強会 大規模mqttを支える技術
ストリーム処理勉強会 大規模mqttを支える技術ストリーム処理勉強会 大規模mqttを支える技術
ストリーム処理勉強会 大規模mqttを支える技術
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
 
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試した
 
MySQLerの7つ道具
MySQLerの7つ道具MySQLerの7つ道具
MySQLerの7つ道具
 
データモデリング入門2021
データモデリング入門2021データモデリング入門2021
データモデリング入門2021
 
ZOZOTOWNのマルチクラウドへの挑戦と挫折、そして未来
ZOZOTOWNのマルチクラウドへの挑戦と挫折、そして未来ZOZOTOWNのマルチクラウドへの挑戦と挫折、そして未来
ZOZOTOWNのマルチクラウドへの挑戦と挫折、そして未来
 
MySQL Fabricでぼっこぼこにされたはなし
MySQL FabricでぼっこぼこにされたはなしMySQL Fabricでぼっこぼこにされたはなし
MySQL Fabricでぼっこぼこにされたはなし
 
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
 
Java でつくる 低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧Java でつくる低レイテンシ実装の技巧
Java でつくる 低レイテンシ実装の技巧
 

More from devsumi2009

【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介
【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介
【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介devsumi2009
 
【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...
【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...
【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...devsumi2009
 
【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて
【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて
【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れてdevsumi2009
 
【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化
【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化
【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化devsumi2009
 
【13-C-5】 パネルディスカッション 帳票開発の肝
【13-C-5】 パネルディスカッション 帳票開発の肝【13-C-5】 パネルディスカッション 帳票開発の肝
【13-C-5】 パネルディスカッション 帳票開発の肝devsumi2009
 
【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるには【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるにはdevsumi2009
 
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~devsumi2009
 
【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~
【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~
【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~devsumi2009
 
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おうdevsumi2009
 
【12-A-1】 開発プロセスの心
【12-A-1】 開発プロセスの心【12-A-1】 開発プロセスの心
【12-A-1】 開発プロセスの心devsumi2009
 
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~devsumi2009
 
【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場からdevsumi2009
 
【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場からdevsumi2009
 
【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場からdevsumi2009
 
【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!
【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!
【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!devsumi2009
 
【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術devsumi2009
 
【12-B-4】 並列処理開発を支援するコンパイラの機能
【12-B-4】 並列処理開発を支援するコンパイラの機能【12-B-4】 並列処理開発を支援するコンパイラの機能
【12-B-4】 並列処理開発を支援するコンパイラの機能devsumi2009
 
【12-D-2】 WPF アプリケーション開発
【12-D-2】 WPF アプリケーション開発【12-D-2】 WPF アプリケーション開発
【12-D-2】 WPF アプリケーション開発devsumi2009
 
【12-D-3】 ASP.NET MVC - 概要と仕組み
【12-D-3】 ASP.NET MVC - 概要と仕組み【12-D-3】 ASP.NET MVC - 概要と仕組み
【12-D-3】 ASP.NET MVC - 概要と仕組みdevsumi2009
 
【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~
【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~
【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~devsumi2009
 

More from devsumi2009 (20)

【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介
【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介
【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介
 
【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...
【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...
【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...
 
【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて
【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて
【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて
 
【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化
【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化
【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化
 
【13-C-5】 パネルディスカッション 帳票開発の肝
【13-C-5】 パネルディスカッション 帳票開発の肝【13-C-5】 パネルディスカッション 帳票開発の肝
【13-C-5】 パネルディスカッション 帳票開発の肝
 
【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるには【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるには
 
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
 
【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~
【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~
【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~
 
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
 
【12-A-1】 開発プロセスの心
【12-A-1】 開発プロセスの心【12-A-1】 開発プロセスの心
【12-A-1】 開発プロセスの心
 
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
 
【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から
 
【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から
 
【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から
 
【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!
【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!
【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!
 
【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術
 
【12-B-4】 並列処理開発を支援するコンパイラの機能
【12-B-4】 並列処理開発を支援するコンパイラの機能【12-B-4】 並列処理開発を支援するコンパイラの機能
【12-B-4】 並列処理開発を支援するコンパイラの機能
 
【12-D-2】 WPF アプリケーション開発
【12-D-2】 WPF アプリケーション開発【12-D-2】 WPF アプリケーション開発
【12-D-2】 WPF アプリケーション開発
 
【12-D-3】 ASP.NET MVC - 概要と仕組み
【12-D-3】 ASP.NET MVC - 概要と仕組み【12-D-3】 ASP.NET MVC - 概要と仕組み
【12-D-3】 ASP.NET MVC - 概要と仕組み
 
【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~
【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~
【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~
 

【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~

  • 1. Java VMへの処方箋 VMへの処方箋 ~先進のメモリ管理技術とは~ 13-B-4 中島 恵 株式会社 日立製作所 ソフトウェア事業部 第2AP基盤ソフト設計部 担当部長
  • 2. Contents 1.Javaのメモリ管理の課題とは 2. GC(ガベージコレクション)の仕組み 3. 「FullGCレス」を実現する最新技術 4. 「FullGCレス」の効果(デモンストレーション) 5. メモリトラブルを起こさないためには
  • 3. Contents 1.Javaのメモリ管理の課題とは 2. GC(ガベージコレクション)の仕組み 3. 「FullGCレス」を実現する最新技術 4. 「FullGCレス」の効果(デモンストレーション) 5. メモリトラブルを起こさないためには
  • 4. 1.Javaのメモリ管理の課題とは Webシステムの安定性・堅牢性を高めるためには Webシステムは、アプリケーションサーバおよびJavaによる 開発生産性の向上によって、容易に構築が可能となった 業務量ピーク時など、性能上のトラブルが後を絶たない システムの性能劣化につながる要因 1. CPUネック JavaVMのメモリ管理機能(GC)に起因 2. メモリネック 3. バックエンドシステムによるネック 4 © Hitachi, Ltd. 2009. All rights reserved.
  • 5. 1.Javaのメモリ管理の課題とは Webシステムの扱うデータサイズの肥大化 Webシステムが参照・更新するデータのサイズが どんどん大きくなってきている 64ビット化で対処はできるが、メモリ領域サイズの 増大に伴ってGCでの停止時間が長時間し、 システム性能劣化に陥る JavaVMのメモリ管理機能(GC)に起因 5 © Hitachi, Ltd. 2009. All rights reserved.
  • 7. Contents 1.Javaのメモリ管理の課題とは 2. GC(ガベージコレクション)の仕組み 3. 「FullGCレス」を実現する最新技術 4. 「FullGCレス」の効果(デモンストレーション) 5. メモリトラブルを起こさないためには
  • 8. 2. ガベージコレクションの仕組み ガベージコレクション(GC)とは… JavaVMが管理するメモリ領域中の使用済みのメモリ領域を破棄し、 空き領域を作ること 使用領域 使用領域 GC 空き領域 使われなくなった領域 空き領域 GC前のヒープ領域 GC後のヒープ領域 8 © Hitachi, Ltd. 2009. All rights reserved.
  • 9. 2.ガベージコレクションの仕組み -Javaヒープとは- Javaプロセスのメモリの内訳 スレッド Permヒープ Cヒープ Javaヒープ スタック Permヒープはトランザクション処理中の メモリ使用領域の変動が少ないため、 GCの対象 本セッションでは考慮しない New Old Eden Survivor 業務プログラム使用領域 J2EEサーバ New領域用 (使用中のインスタン (年齢の古いインスタンスを が使う領域 の退避領域 (できたてのインスタ 配置する領域) ンスを配置する領 スを配置する領域) 域) Javaアプリケーションが使用するメモリ領域 •Javaヒープ クラスなどのメタ情報を格納する領域 •Permヒープ JavaVMやCプログラムが使用するヒープ領域 •Cヒープ スレッドごとに保持するスタック領域 •スレッドスタック 9 © Hitachi, Ltd. 2009. All rights reserved.
  • 10. 2.ガベージコレクションの仕組み -CopyGCとFullGC- GCには2種類ある CopyGC…New領域を対象に、使用済みのインスタンスを全て削除する 使用中のインスタンスは隣の領域へ移動する New Old Eden S1 S2 業務プログラム使用領域 インスタンスの配置に利用できない領域 使用中のものは隣 の領域へ Edenの領域がいっぱいになる とCopyGCが起こる FullGC…全ての領域を対象に、使用済みのインスタンスを全て削除する New Old Eden S1 S2 業務プログラム使用領域 インスタンスの配置に利用できない領域 Oldの業務プログラム使用領域が いっぱいになるとFullGCが起こる 10 © Hitachi, Ltd. 2009. All rights reserved.
  • 11. 2.ガベージコレクションの仕組み -GCの問題点- 2つのGCの比較 範囲 発生タイミング 実行にかかる時間 CopyGC New領域 Eden領域がいっぱいになった時 0.01~0.7秒 FullGC 全領域 Oldの業務プログラム使用領域 1秒~数十秒 がいっぱいになった時 ・FullGCは特に時間が かかる GCはメモリの空き容量を確保するために必要な処理 ・Javaヒープのサイズに より実行にかかる時間 は増加する しかし、GCが発生すると、GC実行中は業務処理が停止する パラレルGC GCアルゴリズムは ノーマルGC 複雑になるほど GCのアルゴリズムを変えて コントロール不可と 対処してみる? なる コンカレントGC 11 © Hitachi, Ltd. 2009. All rights reserved.
  • 12. 2.ガベージコレクションの仕組み -GCの問題点- 2つのGCの比較 範囲 発生タイミング 実行にかかる時間 CopyGC New領域 Eden領域がいっぱいになった時 0.01~0.7秒 FullGC 全領域 Oldの業務プログラム使用領域 1秒~数十秒 がいっぱいになった時 ・FullGCは特に時間が かかる GCはメモリの空き容量を確保するために必要な処理 ・Javaヒープのサイズに より実行にかかる時間 は増加する しかし、GCが発生すると、GC実行中は業務処理が停止する FullGCの発生を抑止することを目的に 発想の転換を行った メモリ領域を1つの枠組みで管理することに そもそも無理があるのでは? 12 © Hitachi, Ltd. 2009. All rights reserved.
  • 13. 2.ガベージコレクションの仕組み -明示管理ヒープ方式の位置付け- ■GC方式 ■ヒープ管理方式 世代別ヒープ管理方式 ノーマルGC (世代別GC方式) パラレルGC + NEW コンカレントGC 明示管理ヒープ方式 特許出願済 GCアルゴリズムの変更ではFullGC発生は回避不可のため、 ヒープ管理方式として明示管理ヒープ方式 (Explicit Heap方式:略称Eヒープ方式)を開発! 13 © Hitachi, Ltd. 2009. All rights reserved.
  • 14. 2.ガベージコレクションの仕組み -安定時のメモリ使用状況(グラフ)- Javaヒープ領域の使用量 FullGC発生なし 安定時のグラフ (非月末) 14 © Hitachi, Ltd. 2009. All rights reserved.
  • 15. 2.ガベージコレクションの仕組み -GC多発時のメモリ使用状況(グラフ)- Javaヒープ領域の使用量 10~15秒おきに1回FullGC発生。 1回あたりのGC処理時間が3~4秒。 GC多発時のグラフ(月末) 15 © Hitachi, Ltd. 2009. All rights reserved.
  • 16. Contents 1.Javaのメモリ管理の課題とは 2. GC(ガベージコレクション)の仕組み 3. 「FullGCレス」を実現する最新技術 4. 「FullGCレス」の効果(デモンストレーション) 5. メモリトラブルを起こさないためには
  • 17. 3. 「FullGCレス」を実現する最新技術 -ヒープ領域ごとの用途- New領域およびOld領域に格納されるインスタンスの違いに着目 New Old 業務プログラム使用領域 JavaEEサーバ New領域用の Eden Survivor Javaヒープ が使う領域 退避領域 構成 格納される 短命なインスタンス New領域用の JavaEEサーバ 長命なインスタンス が使う領域 インスタンス 退避領域 (トランザクション処理で (セッション情報) 使用するメモリなど) Web/APサーバ DBサーバ DBサーバ トランザクション JavaEEサーバ Web Server ログイン セッション 商品表示 情報A 商品購入 クライアント ログアウト 業務プログラム 業務プログラム クライアント 17 © Hitachi, Ltd. 2009. All rights reserved.
  • 18. 3. 「FullGCレス」を実現する最新技術 -ヒープ領域ごとの用途- New領域およびOld領域に格納されるインスタンスの違いに着目 New Old 業務プログラム使用領域 JavaEEサーバ New領域用の Eden Survivor Javaヒープ が使う領域 退避領域 構成 格納される 短命なインスタンス New領域用の JavaEEサーバ 長命なインスタンス が使う領域 インスタンス 退避領域 (トランザクション処理で (セッション情報) 使用するメモリなど) Web/APサーバ DBサーバ DBサーバ ログアウト後も JavaEEサーバ Web Server 残存 クライアント 業務プログラム 業務プログラム クライアント 18 © Hitachi, Ltd. 2009. All rights reserved.
  • 19. 3. 「FullGCレス」を実現する最新技術 -ヒープ領域ごとの用途- New領域およびOld領域に格納されるインスタンスの違いに着目 New Old 業務プログラム使用領域 JavaEEサーバ New領域用の Eden Survivor Javaヒープ が使う領域 退避領域 構成 格納される 短命なインスタンス New領域用の JavaEEサーバ 長命なインスタンス が使う領域 インスタンス 退避領域 (トランザクション処理で (セッション情報) 使用するメモリなど) Web/APサーバ DBサーバ DBサーバ JavaEEサーバ Web Server クライアント ログイン セッション 情報B 商品表示 ログアウト 業務プログラム 業務プログラム クライアント 19 © Hitachi, Ltd. 2009. All rights reserved.
  • 20. 3. 「FullGCレス」を実現する最新技術 -ヒープ領域ごとの用途- New領域およびOld領域に格納されるインスタンスの違いに着目 New Old 業務プログラム使用領域 JavaEEサーバ New領域用の Eden Survivor Javaヒープ が使う領域 退避領域 構成 格納される 短命なインスタンス New領域用の JavaEEサーバ 長命なインスタンス が使う領域 インスタンス 退避領域 (トランザクション処理で (セッション情報) 使用するメモリなど) Web/APサーバ DBサーバ DBサーバ JavaEEサーバ Web Server ログオフ後もセッション情報が クライアント 残存、蓄積してFullGCが発生 業務プログラム 業務プログラム クライアント 20 © Hitachi, Ltd. 2009. All rights reserved.
  • 21. 3. 「FullGCレス」を実現する最新技術 -Full GCレスでStop The Worldを解消!- 業界初!(*) Full GCによるオンライン業務の一時的な停止は、 Full GCレスを実現 何とかならないものだろうか・・・ Webアプリケーションの変更無く、Full GCの発生を抑止。 ポイント Full GCによるオンライン業務の一時停止を解消します。 ログオフ後も セッション情報が残存。 従来方式 応答時間(秒) Full GCで解放。 15.0 ログイン セッションオブジェクト 商品表示 10.0 Full GC 商品購入 New領域 発生 5.0 Old領域 ログオフ 時間 Javaヒープ GC対象外である Eヒープ領域に配置し 応答なし・・・ Full GC発生を抑止 応答時間(秒) 新方式 15.0 10.0 New領域 Old領域 5.0 快適! Eヒープ領域 Javaヒープ 時間 (*)・・・弊社調べ 2008年10月時点 21 © Hitachi, Ltd. 2009. All rights reserved.
  • 22. 3. 「FullGCレス」を実現する最新技術 -FullGCレス機能適用時の動き- New Old 業務プログラム使用領域 J2EEサーバ New領域用の Eden Survivor Javaヒープ 長命なインスタンス が使う領域 退避領域 短命なインスタンス Web/APサーバ DBサーバ DBサーバ トランザクション J2EEサーバ Web Server ログイン セッション 商品表示 情報A 商品購入 クライアント 業務プログラム 業務プログラム クライアント 22 © Hitachi, Ltd. 2009. All rights reserved.
  • 23. 3. 「FullGCレス」を実現する最新技術 -FullGCレス機能適用時の動き- New Old 業務プログラム使用領域 J2EEサーバ New領域用の Eden Survivor Javaヒープ 長命なインスタンス が使う領域 退避領域 短命なインスタンス Eヒープ領域 セッション オブジェクト Web/APサーバ DBサーバ DBサーバ トランザクション J2EEサーバ Web Server ログイン セッション 商品表示 情報A 商品購入 クライアント ログアウト 業務プログラム 業務プログラム クライアント 23 © Hitachi, Ltd. 2009. All rights reserved.
  • 24. 3. 「FullGCレス」を実現する最新技術 -FullGCレス機能適用時の動き- New Old 業務プログラム使用領域 J2EEサーバ New領域用の Eden Survivor Javaヒープ 長命なインスタンス が使う領域 退避領域 短命なインスタンス セッション Eヒープ領域 セッション オブジェクト オブジェクト Web/APサーバ DBサーバ DBサーバ J2EEサーバ Web Server クライアント ログイン セッション 情報B 商品表示 業務プログラム 業務プログラム クライアント ログアウト 24 © Hitachi, Ltd. 2009. All rights reserved.
  • 25. 3. 「FullGCレス」を実現する最新技術 -FullGCレス機能適用時の動き- New Old 業務プログラム使用領域 J2EEサーバ New領域用の Eden Survivor Javaヒープ 長命なインスタンス が使う領域 退避領域 短命なインスタンス セッション Eヒープ領域 オブジェクト セッション情報が蓄積せず FullGCレス! Web/APサーバ DBサーバ DBサーバ J2EEサーバ Web Server クライアント 業務プログラム 業務プログラム クライアント 25 © Hitachi, Ltd. 2009. All rights reserved.
  • 26. 3. 「FullGCレス」を実現する最新技術 特許出願済 -FullGCレス機能の仕組みとは- メモリ領域 業務プログラム Cosminexus Eヒープ (1)セッションの生成 セッションの割り当て HttpSession session = request.getSession(); 明示管理ヒープ 領域確保 (2)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj1 = new UserObject1(); session.setAttribute(Key1, obj1); (3)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj2 = new UserObject2(); session. setAttribute(Key2, obj2); (4)セッションの終了 session.invalidate(); 26 © Hitachi, Ltd. 2009. All rights reserved.
  • 27. 3. 「FullGCレス」を実現する最新技術 特許出願済 -FullGCレス機能の仕組みとは- メモリ領域 業務プログラム Cosminexus Eヒープ (1)セッションの生成 HttpSession session = request.getSession(); New領域 (2)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj1 = new UserObject1(); session.setAttribute(Key1, obj1); (3)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj2 = new UserObject2(); session. setAttribute(Key2, obj2); (4)セッションの終了 session.invalidate(); 27 © Hitachi, Ltd. 2009. All rights reserved.
  • 28. 3. 「FullGCレス」を実現する最新技術 特許出願済 -FullGCレス機能の仕組みとは- メモリ領域 業務プログラム Cosminexus Eヒープ (1)セッションの生成 HttpSession session = request.getSession(); New領域 (2)オブジェクトの生成およびセッションへの Obj1とセッション オブジェクトの格納 を関連付け Object obj1 = new UserObject1(); session.setAttribute(Key1, obj1); (3)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj2 = new UserObject2(); session. setAttribute(Key2, obj2); (4)セッションの終了 session.invalidate(); 28 © Hitachi, Ltd. 2009. All rights reserved.
  • 29. 3. 「FullGCレス」を実現する最新技術 特許出願済 -FullGCレス機能の仕組みとは- メモリ領域 業務プログラム Cosminexus Eヒープ (1)セッションの生成 HttpSession session = request.getSession(); New領域 (2)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj1 = new UserObject1(); session.setAttribute(Key1, obj1); CopyGCで移動 (3)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj2 = new UserObject2(); session. setAttribute(Key2, obj2); (4)セッションの終了 session.invalidate(); 29 © Hitachi, Ltd. 2009. All rights reserved.
  • 30. 3. 「FullGCレス」を実現する最新技術 特許出願済 -FullGCレス機能の仕組みとは- メモリ領域 業務プログラム Cosminexus Eヒープ (1)セッションの生成 HttpSession session = request.getSession(); New領域 (2)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj1 = new UserObject1(); session.setAttribute(Key1, obj1); CopyGCで移動 (3)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj2 = new UserObject2(); session. setAttribute(Key2, obj2); (4)セッションの終了 session.invalidate(); 30 © Hitachi, Ltd. 2009. All rights reserved.
  • 31. 3. 「FullGCレス」を実現する最新技術 特許出願済 -FullGCレス機能の仕組みとは- メモリ領域 業務プログラム Cosminexus Eヒープ (1)セッションの生成 HttpSession session = request.getSession(); (2)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj1 = new UserObject1(); session.setAttribute(Key1, obj1); New領域 (3)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj2 = new UserObject2(); session. setAttribute(Key2, obj2); (4)セッションの終了 session.invalidate(); 31 © Hitachi, Ltd. 2009. All rights reserved.
  • 32. 3. 「FullGCレス」を実現する最新技術 特許出願済 -FullGCレス機能の仕組みとは- メモリ領域 業務プログラム Cosminexus Eヒープ (1)セッションの生成 HttpSession session = request.getSession(); (2)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj1 = new UserObject1(); session.setAttribute(Key1, obj1); New領域 (3)オブジェクトの生成およびセッションへの Obj2とセッション オブジェクトの格納 を関連付け Object obj2 = new UserObject2(); session. setAttribute(Key2, obj2); (4)セッションの終了 session.invalidate(); 32 © Hitachi, Ltd. 2009. All rights reserved.
  • 33. 3. 「FullGCレス」を実現する最新技術 特許出願済 -FullGCレス機能の仕組みとは- メモリ領域 業務プログラム Cosminexus Eヒープ (1)セッションの生成 HttpSession session = request.getSession(); (2)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj1 = new UserObject1(); session.setAttribute(Key1, obj1); New領域 (3)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj2 = new UserObject2(); session. setAttribute(Key2, obj2); CopyGCで移動 (4)セッションの終了 session.invalidate(); 33 © Hitachi, Ltd. 2009. All rights reserved.
  • 34. 3. 「FullGCレス」を実現する最新技術 特許出願済 -FullGCレス機能の仕組みとは- メモリ領域 業務プログラム Cosminexus Eヒープ (1)セッションの生成 HttpSession session = request.getSession(); (2)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj1 = new UserObject1(); session.setAttribute(Key1, obj1); New領域 (3)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj2 = new UserObject2(); session. setAttribute(Key2, obj2); CopyGCで移動 (4)セッションの終了 session.invalidate(); 34 © Hitachi, Ltd. 2009. All rights reserved.
  • 35. 3. 「FullGCレス」を実現する最新技術 特許出願済 -FullGCレス機能の仕組みとは- メモリ領域 業務プログラム Cosminexus Eヒープ (1)セッションの生成 HttpSession session = request.getSession(); (2)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj1 = new UserObject1(); session.setAttribute(Key1, obj1); (3)オブジェクトの生成およびセッションへの オブジェクトの格納 Object obj2 = new UserObject2(); session. setAttribute(Key2, obj2); 明示管理ヒープ (4)セッションの終了 領域削除 session.invalidate(); アプリ変更無しにセッションオブジェクトをEヒープで管理 35 © Hitachi, Ltd. 2009. All rights reserved.
  • 36. 3. 「FullGCレス」を実現する最新技術 特許出願済 -「Eヒープ領域削除」の堅牢化- 削除するEヒープ内に共通データなど使用中データが存在する場合 単純な削除ではトラブル(領域外参照)が発生 Javaヒープ領域 Eヒープ領域 Old New 誤って領域削除 単純な削除ではアベンド発生! 36 © Hitachi, Ltd. 2009. All rights reserved.
  • 37. 3. 「FullGCレス」を実現する最新技術 特許出願済 -「Eヒープ領域削除」の堅牢化- 削除するEヒープ内に共通データなど使用中データが存在する場合 単純な削除ではトラブル(領域外参照)が発生 Javaヒープ領域 Eヒープ領域 Old New 誤って領域削除 領域削除時に使用中 オブジェクトを検出して移動 37 © Hitachi, Ltd. 2009. All rights reserved.
  • 38. 3. 「FullGCレス」を実現する最新技術 特許出願済 -「Eヒープ領域削除」の堅牢化- 削除するEヒープ内に共通データなど使用中データが存在する場合 単純な削除ではトラブル(領域外参照)が発生 Javaヒープ領域 Eヒープ領域 Old New 誤って領域削除 領域削除時に使用中 オブジェクトを検出して移動 38 © Hitachi, Ltd. 2009. All rights reserved.
  • 39. 3. 「FullGCレス」を実現する最新技術 特許出願済 -「Eヒープ領域削除」の堅牢化- 削除するEヒープ内に共通データなど使用中データが存在する場合 単純な削除ではトラブル(領域外参照)が発生 Javaヒープ領域 Eヒープ領域 Old New 誤って領域削除 領域削除時に使用中 オブジェクトを検出して移動 Eヒープ内に使用中データが存在する場合にはJavaヒープへの移動を 行い、そのEヒープを削除してしまっても問題なく動作 システム堅牢性を確保 39 © Hitachi, Ltd. 2009. All rights reserved.
  • 40. 3. 「FullGCレス」を実現する最新技術 特許出願済 -FullGCレス機能適用時のオーバヘッド- FullGCレス機能適用時CopyGC処理のコスト → 従来のCopyGC処理時間の最大30%増 Javaヒープ領域 Eヒープ領域 Old New CopyGC 処理前 CopyGC CopyGC Old New 処理後 CopyGC時にEヒープ領域への移動候補の解析及び 移動先がJavaヒープかEヒープかの移動先判定を行う 40 © Hitachi, Ltd. 2009. All rights reserved.
  • 41. 3. 「FullGCレス」を実現する最新技術 特許出願済 -FullGCレス機能適用時のオーバヘッド- [単価極小(数十ms~数百ms)のCopyGCに対して30%増のオーバヘッドのみ] FullGCの停止処理コストを広く浅くオンライン業務処理全域に割り振るのではなく、 FullGCの停止処理コストを広く浅くオンライン業務処理全域に割り振るのではなく、 FullGC対象領域を縮小させる という抜本的な方式のため、処理全体に占める増加 FullGC対象領域を縮小させる という抜本的な方式のため、処理全体に占める増加 オーバーヘッドはCopyGCオーバヘッド増という限定されたものとなる。 オーバーヘッドはCopyGCオーバヘッド増という限定されたものとなる。 [CopyGC時間増によるスループット劣化の試算例] [CopyGC時間増によるスループット劣化の試算例] 測定単位時間:10:00~15:45(20700秒) 測定単位時間:10:00~15:45(20700秒) 平均CopyGC時間:0.328秒/回 (30%増) CopyGC回数:1658回 CopyGC回数:1658回 処理件数:545486件 (0.61%劣化) →処理性能への影響 平均CopyGC時間:0.253秒/回 平均CopyGC時間:0.253秒/回 1%未満 処理件数:548819件 処理件数:548819件 41 © Hitachi, Ltd. 2009. All rights reserved.
  • 42. 3. 「FullGCレス」を実現する最新技術 特許出願済 -FullGCレス機能の効果例- Cosminexus動作時のメモリ使用量変化: A銀行殿縮小模擬環境 動作時のメモリ使用量 FullGCの発生で 120 全業務が一時的に停止 従来 V8以降 100 80 60 40 20 V8以降は FullGC発生せず 0 「FullGCレス」を実現! GC対象外領域でメモリ大容量化対応! 42 © Hitachi, Ltd. 2009. All rights reserved.
  • 43. 3. 「FullGCレス」を実現する最新技術 -Cosminexusでしか実現できない理由- 業務アプリケーション セッションオブジェクトを JavaEEサーバと JavaEEサーバ 自動Eヒープ化 JavaVMの連携により 業務アプリの変更無しに 「FullGCレス」を 「FullGCレス」 実現可能に! Java VM Eヒープ領域を追加 従来方式 セッションオブジェクト New領域 Old領域 Javaヒープ 新方式 New領域 Old領域 Javaヒープ Eヒープ領域 43 © Hitachi, Ltd. 2009. All rights reserved.
  • 44. 3. 「FullGCレス」を実現する最新技術 -Cosminexusでしか実現できない理由- 業務アプリケーション Cosminexusのサポート プラットフォーム全てで JavaEEサーバ 「FullGCレス」を実現! 「FullGCレス」 全プラットフォームに 日立Java VM 独自JavaVMを開発 (Cosminexus V5より) OS HP-UX Solaris Windows Linux AIX ハードウェア Power Sparc Itanium x86/x64 44 © Hitachi, Ltd. 2009. All rights reserved.
  • 45. Contents 1.Javaのメモリ管理の課題とは 2. GC(ガベージコレクション)の仕組み 3. 「FullGCレス」を実現する最新技術 4. 「FullGCレス」の効果(デモンストレーション) 5. メモリトラブルを起こさないためには
  • 46. 4. 「FullGCレス」の効果(デモンストレーション) -デモンストレーションの構成- 現実のシステムでは、多くのユーザがサーバにログインします。 Web/APサーバ <従来> Javaヒープに ユーザ セッションの ゴミが溜まる。 Web J2EEサーバ Javaヒープ サーバ 業務アプリ セッション 多くのユーザ 業務アプリ セッション セッション 業務アプリ ログイン/ ログアウトが 行われている 46 © Hitachi, Ltd. 2009. All rights reserved.
  • 47. 4. 「FullGCレス」の効果(デモンストレーション) -デモンストレーションの構成- ここでは、シミュレータを使って多くの仮想ユーザでログインします。 <従来> FullGCが実行されると、 突然応答が遅くなっ た! Web/APサーバ <従来> Javaヒープに 利用者 セッションの ゴミが溜まる。 Web J2EEサーバ Javaヒープ サーバ 業務アプリ セッション 業務アプリ セッション 仮想ユーザ セッション ログイン/ 業務アプリ (Webシミュレータ) ログアウトを 繰り返す 47 © Hitachi, Ltd. 2009. All rights reserved.
  • 48. 4. 「FullGCレス」の効果(デモンストレーション) -デモンストレーションの内容- 従来方式 FullGCレス Web/J2EEサーバ2 Web/J2EEサーバ1 jconsole jconsole GC対象外 Javaヒープ Javaヒープ 領域 セッション セッション セッション セッション セッション セッション アクセス ログイン& アクセス ログイン& ログアウト ログアウト ブラウザ(画面) ブラウザ(画面) 時間:○○[ms] 比較 時間:××[ms] 48 © Hitachi, Ltd. 2009. All rights reserved.
  • 49. 4. 「FullGCレス」の効果(デモンストレーション) スクリーンをご覧ください。 49 © Hitachi, Ltd. 2009. All rights reserved.
  • 50. 4. 「FullGCレス」の効果(デモンストレーション) -デモンストレーションの結果まとめ- 従来方式 FullGCレス 50MB弱 FullGC 130~180MB 10.48秒 0.85秒 「FullGCレス」によりレスポンス遅延解消! 50 © Hitachi, Ltd. 2009. All rights reserved.
  • 51. Contents 1.Javaのメモリ管理の課題とは 2. GC(ガベージコレクション)の仕組み 3. 「FullGCレス」を実現する最新技術 4. 「FullGCレス」の効果(デモンストレーション) 5. メモリトラブルを起こさないためには
  • 52. 5.メモリトラブルを起こさないためには -パフォーマンス見積もりシート- 「パフォーマンス見積もりシート」を用いてラクラク見積もり 赤枠の項目の一部を入力すると、必要なメモリサイズ、CPU数などを自動サイジング Cosminexus 認定資格講座より http://www.hitachi.co.jp/Prod/comp/soft1/certification/cosminexus/kouza.html 52 © Hitachi, Ltd. 2009. All rights reserved.
  • 53. 5.メモリトラブルを起こさないためには -メモリリーク- メモリリークとは… プログラマが予想しないところでオブジェクトの参照が残ってしまい、 GCを行っても解放されないオブジェクトが継続的に増加してしまうこと Javaヒープ領域の使用量 -Xmxの指定値 OutOfMemoryError (メモリ不足)発生 53 © Hitachi, Ltd. 2009. All rights reserved.
  • 54. 5.メモリトラブルを起こさないためには -メモリリーク原因の特定- 「ヒーププロファイル機能」 メモリリークしているが、原因が特定できない。 メモリの解放モレ(オブジェクト参照の解除モレ)の原因を容易に追求する ことが可能になります。 JavaVM自身で情報出力を行うため、高い精度で解析を行うことが可能です。 ポイント 通常実行時のオーバヘッドはゼロ。 情報取得時のオーバヘッドはFullGC1回分程度の低オーバヘッド。 サーバーを再起動することなく情報を取得できます。 Java VMメモリ空間 ①領域単位のメモリ ②領域を保持している 消費量の把握 モジュールを把握 モジュール1 領域a 領域aが多くの モジュール1が領域a メモリを消費している を保持している。 モジュール2 領域b ことを確認します。 →仕様/バグを調査 ※ 実際は領域/モジュールともJavaのクラスインスタンスになります。 Total Size of Instances Reference of class classC Total Size of Instances classCをポイントしている Reference of class classC ----------------------- ------------------------- ----------------------- ------------------------- すべてのクラスが一覧とし ___________Size__Instances__Class________________ classA(0x10766840)[Eden] ___________Size__Instances__Class________________ classA(0x10766840)[Eden] て出力されます。ヒープ領 1437424 15809 [Ljava.lang.Class; classX(0x10766998)[Eden] 1437424 15809 [Ljava.lang.Class; classX(0x10766998)[Eden] 525120 7408 java.util.HashMap$Entry 域名も表示します ------ 525120 7408 java.util.HashMap$Entry ------ 502000 7094 java.util.HashMap classB(0x10766840)[Eden] 502000 7094 java.util.HashMap classB(0x10766840)[Eden] 500248 7012 [Ljava.util.HashMap$Entry; classC(0x10766858)[Tenured] 500248 7012 [Ljava.util.HashMap$Entry; classC(0x10766858)[Tenured] 486336 4017 java.lang.ref.SoftReference classD(0x10766968)[Eden] 486336 4017 java.lang.ref.SoftReference classD(0x10766968)[Eden] 394760 4658 java.util.HashSet classX(0x10766a28)[Survivor] 394760 4658 java.util.HashSet classX(0x10766a28)[Survivor] 394328 4648 java.lang.Shutdown$WrappedHook ------ 394328 4648 java.lang.Shutdown$WrappedHook ------ … classE(0x10766840)[Eden] … classE(0x10766840)[Eden] classA(0x10766920)[Survivor] classA(0x10766920)[Survivor] classX(0x06aa0020)[EM(eid=1)] classX(0x06aa0020)[EM(eid=1)] 54 © Hitachi, Ltd. 2009. All rights reserved.
  • 55. 5.メモリトラブルを起こさないためには -FullGC発生によるスローダウンの回避- FullGC発生によるスローダウンを事前に検知して回避したい。 FullGCの発生を事前に検知し自律的に再起動することで、トラブルを 未然に防止。 ポイント セッション情報を引継ぐため,業務を継続することができる。 Full GCの 予兆あり! 自律的に 正常運転 サーバを再起動して 問題を回避 セセ サーバA ッッ シシ プロセス プロセス 負 セッション セッション ョョ 再起動 荷 再起動 ンン の保存 の保存 分 管管 サーバB 散 理理 機 セセ セセ サーバA サーバA ッッ ッッ シシ シシ 負 ョョ 負 ョョ ンン 荷 荷 ンン 管管 分 分 管管 理理 サーバB サーバB 散 散 理理 機 機 振分け 振分け セッション セッション 定義変更 定義変更 の回復 の回復 55 © Hitachi, Ltd. 2009. All rights reserved.
  • 56. まとめ Cosminexus V8は、Webシステムの“Stop the world” 解消のために「FullGCレス」を実現する機能を新たに 搭載した。アプリの変更なく、誰でも恩恵を享受できる。 Cosminexus 日立JavaVMの明示管理ヒープと、アプリ ケーションサーバとの密連携という高度な独自技術の結晶 として、 「FullGCレス機能」は実現されている。 メモリリークなどのアプリ不良によって、メモリトラブルが 発生する場合もある。これについての調査方法は確立 されており、トラブルを暫定回避する機能もある。 56 © Hitachi, Ltd. 2009. All rights reserved.
  • 58. 他社所有名称に対する表示 Cosminexus ホームページ http://www.hitachi.co.jp/cosminexus/ http://www.cosminexus.com/ Cosminexus 認定資格講座 http://www.hitachi.co.jp/Prod/comp/soft1/certification/cosminexus/kouza.html 謝辞および他社所有名称に対する表示 《他社所有名称に対する表示》 •Java 及びすべてのJava関連の商標及びロゴは,米国及びその他の国における米国Sun Microsystems, Inc.の商標または登録商標です。 •その他記載の会社名、製品名は、それぞれの会社の商号、商標もしくは登録商標です。 58 © Hitachi, Ltd. 2009. All rights reserved.