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

5,067
-1

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,067
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
105
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. Java VMへの処方箋 VMへの処方箋 ~先進のメモリ管理技術とは~ 13-B-4 中島 恵 株式会社 日立製作所 ソフトウェア事業部 第2AP基盤ソフト設計部 担当部長
  2. 2. Contents 1.Javaのメモリ管理の課題とは 2. GC(ガベージコレクション)の仕組み 3. 「FullGCレス」を実現する最新技術 4. 「FullGCレス」の効果(デモンストレーション) 5. メモリトラブルを起こさないためには
  3. 3. Contents 1.Javaのメモリ管理の課題とは 2. GC(ガベージコレクション)の仕組み 3. 「FullGCレス」を実現する最新技術 4. 「FullGCレス」の効果(デモンストレーション) 5. メモリトラブルを起こさないためには
  4. 4. 1.Javaのメモリ管理の課題とは Webシステムの安定性・堅牢性を高めるためには Webシステムは、アプリケーションサーバおよびJavaによる 開発生産性の向上によって、容易に構築が可能となった 業務量ピーク時など、性能上のトラブルが後を絶たない システムの性能劣化につながる要因 1. CPUネック JavaVMのメモリ管理機能(GC)に起因 2. メモリネック 3. バックエンドシステムによるネック 4 © Hitachi, Ltd. 2009. All rights reserved.
  5. 5. 1.Javaのメモリ管理の課題とは Webシステムの扱うデータサイズの肥大化 Webシステムが参照・更新するデータのサイズが どんどん大きくなってきている 64ビット化で対処はできるが、メモリ領域サイズの 増大に伴ってGCでの停止時間が長時間し、 システム性能劣化に陥る JavaVMのメモリ管理機能(GC)に起因 5 © Hitachi, Ltd. 2009. All rights reserved.
  6. 6. 1.Javaのメモリ管理の課題とは JavaVMのメモリ管理機能(GC)に起因した問題が山積 JavaVMのメモリ管理機能(GC)として、これらの問題を 解消する「次の一手」が、課題解決のためには必要 JavaVMを大きく改良することによって、課題を解決する アプローチが見出せるのでは? 6 © Hitachi, Ltd. 2009. All rights reserved.
  7. 7. Contents 1.Javaのメモリ管理の課題とは 2. GC(ガベージコレクション)の仕組み 3. 「FullGCレス」を実現する最新技術 4. 「FullGCレス」の効果(デモンストレーション) 5. メモリトラブルを起こさないためには
  8. 8. 2. ガベージコレクションの仕組み ガベージコレクション(GC)とは… JavaVMが管理するメモリ領域中の使用済みのメモリ領域を破棄し、 空き領域を作ること 使用領域 使用領域 GC 空き領域 使われなくなった領域 空き領域 GC前のヒープ領域 GC後のヒープ領域 8 © Hitachi, Ltd. 2009. All rights reserved.
  9. 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. 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. 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. 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. 13. 2.ガベージコレクションの仕組み -明示管理ヒープ方式の位置付け- ■GC方式 ■ヒープ管理方式 世代別ヒープ管理方式 ノーマルGC (世代別GC方式) パラレルGC + NEW コンカレントGC 明示管理ヒープ方式 特許出願済 GCアルゴリズムの変更ではFullGC発生は回避不可のため、 ヒープ管理方式として明示管理ヒープ方式 (Explicit Heap方式:略称Eヒープ方式)を開発! 13 © Hitachi, Ltd. 2009. All rights reserved.
  14. 14. 2.ガベージコレクションの仕組み -安定時のメモリ使用状況(グラフ)- Javaヒープ領域の使用量 FullGC発生なし 安定時のグラフ (非月末) 14 © Hitachi, Ltd. 2009. All rights reserved.
  15. 15. 2.ガベージコレクションの仕組み -GC多発時のメモリ使用状況(グラフ)- Javaヒープ領域の使用量 10~15秒おきに1回FullGC発生。 1回あたりのGC処理時間が3~4秒。 GC多発時のグラフ(月末) 15 © Hitachi, Ltd. 2009. All rights reserved.
  16. 16. Contents 1.Javaのメモリ管理の課題とは 2. GC(ガベージコレクション)の仕組み 3. 「FullGCレス」を実現する最新技術 4. 「FullGCレス」の効果(デモンストレーション) 5. メモリトラブルを起こさないためには
  17. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 36. 3. 「FullGCレス」を実現する最新技術 特許出願済 -「Eヒープ領域削除」の堅牢化- 削除するEヒープ内に共通データなど使用中データが存在する場合 単純な削除ではトラブル(領域外参照)が発生 Javaヒープ領域 Eヒープ領域 Old New 誤って領域削除 単純な削除ではアベンド発生! 36 © Hitachi, Ltd. 2009. All rights reserved.
  37. 37. 3. 「FullGCレス」を実現する最新技術 特許出願済 -「Eヒープ領域削除」の堅牢化- 削除するEヒープ内に共通データなど使用中データが存在する場合 単純な削除ではトラブル(領域外参照)が発生 Javaヒープ領域 Eヒープ領域 Old New 誤って領域削除 領域削除時に使用中 オブジェクトを検出して移動 37 © Hitachi, Ltd. 2009. All rights reserved.
  38. 38. 3. 「FullGCレス」を実現する最新技術 特許出願済 -「Eヒープ領域削除」の堅牢化- 削除するEヒープ内に共通データなど使用中データが存在する場合 単純な削除ではトラブル(領域外参照)が発生 Javaヒープ領域 Eヒープ領域 Old New 誤って領域削除 領域削除時に使用中 オブジェクトを検出して移動 38 © Hitachi, Ltd. 2009. All rights reserved.
  39. 39. 3. 「FullGCレス」を実現する最新技術 特許出願済 -「Eヒープ領域削除」の堅牢化- 削除するEヒープ内に共通データなど使用中データが存在する場合 単純な削除ではトラブル(領域外参照)が発生 Javaヒープ領域 Eヒープ領域 Old New 誤って領域削除 領域削除時に使用中 オブジェクトを検出して移動 Eヒープ内に使用中データが存在する場合にはJavaヒープへの移動を 行い、そのEヒープを削除してしまっても問題なく動作 システム堅牢性を確保 39 © Hitachi, Ltd. 2009. All rights reserved.
  40. 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. 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. 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. 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. 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. 45. Contents 1.Javaのメモリ管理の課題とは 2. GC(ガベージコレクション)の仕組み 3. 「FullGCレス」を実現する最新技術 4. 「FullGCレス」の効果(デモンストレーション) 5. メモリトラブルを起こさないためには
  46. 46. 4. 「FullGCレス」の効果(デモンストレーション) -デモンストレーションの構成- 現実のシステムでは、多くのユーザがサーバにログインします。 Web/APサーバ <従来> Javaヒープに ユーザ セッションの ゴミが溜まる。 Web J2EEサーバ Javaヒープ サーバ 業務アプリ セッション 多くのユーザ 業務アプリ セッション セッション 業務アプリ ログイン/ ログアウトが 行われている 46 © Hitachi, Ltd. 2009. All rights reserved.
  47. 47. 4. 「FullGCレス」の効果(デモンストレーション) -デモンストレーションの構成- ここでは、シミュレータを使って多くの仮想ユーザでログインします。 <従来> FullGCが実行されると、 突然応答が遅くなっ た! Web/APサーバ <従来> Javaヒープに 利用者 セッションの ゴミが溜まる。 Web J2EEサーバ Javaヒープ サーバ 業務アプリ セッション 業務アプリ セッション 仮想ユーザ セッション ログイン/ 業務アプリ (Webシミュレータ) ログアウトを 繰り返す 47 © Hitachi, Ltd. 2009. All rights reserved.
  48. 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. 49. 4. 「FullGCレス」の効果(デモンストレーション) スクリーンをご覧ください。 49 © Hitachi, Ltd. 2009. All rights reserved.
  50. 50. 4. 「FullGCレス」の効果(デモンストレーション) -デモンストレーションの結果まとめ- 従来方式 FullGCレス 50MB弱 FullGC 130~180MB 10.48秒 0.85秒 「FullGCレス」によりレスポンス遅延解消! 50 © Hitachi, Ltd. 2009. All rights reserved.
  51. 51. Contents 1.Javaのメモリ管理の課題とは 2. GC(ガベージコレクション)の仕組み 3. 「FullGCレス」を実現する最新技術 4. 「FullGCレス」の効果(デモンストレーション) 5. メモリトラブルを起こさないためには
  52. 52. 5.メモリトラブルを起こさないためには -パフォーマンス見積もりシート- 「パフォーマンス見積もりシート」を用いてラクラク見積もり 赤枠の項目の一部を入力すると、必要なメモリサイズ、CPU数などを自動サイジング Cosminexus 認定資格講座より http://www.hitachi.co.jp/Prod/comp/soft1/certification/cosminexus/kouza.html 52 © Hitachi, Ltd. 2009. All rights reserved.
  53. 53. 5.メモリトラブルを起こさないためには -メモリリーク- メモリリークとは… プログラマが予想しないところでオブジェクトの参照が残ってしまい、 GCを行っても解放されないオブジェクトが継続的に増加してしまうこと Javaヒープ領域の使用量 -Xmxの指定値 OutOfMemoryError (メモリ不足)発生 53 © Hitachi, Ltd. 2009. All rights reserved.
  54. 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. 55. 5.メモリトラブルを起こさないためには -FullGC発生によるスローダウンの回避- FullGC発生によるスローダウンを事前に検知して回避したい。 FullGCの発生を事前に検知し自律的に再起動することで、トラブルを 未然に防止。 ポイント セッション情報を引継ぐため,業務を継続することができる。 Full GCの 予兆あり! 自律的に 正常運転 サーバを再起動して 問題を回避 セセ サーバA ッッ シシ プロセス プロセス 負 セッション セッション ョョ 再起動 荷 再起動 ンン の保存 の保存 分 管管 サーバB 散 理理 機 セセ セセ サーバA サーバA ッッ ッッ シシ シシ 負 ョョ 負 ョョ ンン 荷 荷 ンン 管管 分 分 管管 理理 サーバB サーバB 散 散 理理 機 機 振分け 振分け セッション セッション 定義変更 定義変更 の回復 の回復 55 © Hitachi, Ltd. 2009. All rights reserved.
  56. 56. まとめ Cosminexus V8は、Webシステムの“Stop the world” 解消のために「FullGCレス」を実現する機能を新たに 搭載した。アプリの変更なく、誰でも恩恵を享受できる。 Cosminexus 日立JavaVMの明示管理ヒープと、アプリ ケーションサーバとの密連携という高度な独自技術の結晶 として、 「FullGCレス機能」は実現されている。 メモリリークなどのアプリ不良によって、メモリトラブルが 発生する場合もある。これについての調査方法は確立 されており、トラブルを暫定回避する機能もある。 56 © Hitachi, Ltd. 2009. All rights reserved.
  57. 57. END END
  58. 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.
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×