More Related Content
More from devsumi2009 (20)
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
- 1. Java VMへの処方箋
VMへの処方箋
~先進のメモリ管理技術とは~
13-B-4 中島 恵
株式会社 日立製作所 ソフトウェア事業部
第2AP基盤ソフト設計部 担当部長
- 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.
- 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.
- 15. 2.ガベージコレクションの仕組み
-GC多発時のメモリ使用状況(グラフ)-
Javaヒープ領域の使用量
10~15秒おきに1回FullGC発生。
1回あたりのGC処理時間が3~4秒。
GC多発時のグラフ(月末)
15
© Hitachi, Ltd. 2009. All rights reserved.
- 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.
- 46. 4. 「FullGCレス」の効果(デモンストレーション)
-デモンストレーションの構成-
現実のシステムでは、多くのユーザがサーバにログインします。
Web/APサーバ
<従来>
Javaヒープに
ユーザ セッションの
ゴミが溜まる。
Web J2EEサーバ
Javaヒープ
サーバ 業務アプリ セッション
多くのユーザ
業務アプリ セッション
セッション
業務アプリ
ログイン/
ログアウトが
行われている
46
© 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.
- 50. 4. 「FullGCレス」の効果(デモンストレーション)
-デモンストレーションの結果まとめ-
従来方式 FullGCレス
50MB弱
FullGC
130~180MB
10.48秒 0.85秒
「FullGCレス」によりレスポンス遅延解消!
50
© Hitachi, Ltd. 2009. All rights reserved.
- 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.