Full GC発生を抑止するメモリ管理技術

Similar documents
PowerPoint プレゼンテーション

開発・運用時のガイド JDK8への移行に伴う留意点 [UNIX]

CLUSTERPRO MC ProcessSaver 2.3 for Windows 導入ガイド 第 5 版 2018 年 6 月 日本電気株式会社

WebOTXプロファイラを使用したメモリリーク調査方法

目次 1. はじめに SSL 通信を使用する上での課題 SSL アクセラレーターによる解決 SSL アクセラレーターの導入例 SSL アクセラレーターの効果... 6 富士通の SSL アクセラレーター装置のラインナップ... 8

21 章のお話

ファイナライザを理解する ~ ファイナライザに起因するトラブルを避けるために ~ 2013 年 11 月 25 日 橋口雅史 Java アプリケーションでファイナライザ (finalize() メソッド ) を使用したことがあるプログラマーは多いと思います しかし ファイナライザの仕組みや注意点につ

CLUSTERPRO MC ProcessSaver 1.2 for Windows 導入ガイド 第 4 版 2014 年 3 月 日本電気株式会社

ストリームデータ処理技術を利用したソリューションの紹介 -大量データのリアルタイム処理-

Microsoft PowerPoint - CLUSTERPRO_BIG-IP.ppt[読み取り専用]

富士通製プラットフォーム 「PRIMEPOWER/PRIMERGY」及び、富士通製ミドルウェア 「Interstage」とVantage Analyzer 動作検証完了報告書

<4D F736F F D C A8DED8F9C8EE88F878F E C5816A2E646F63>

memcached 方式 (No Replication) 認証情報は ログインした tomcat と設定された各 memcached サーバーに認証情報を分割し振り分けて保管する memcached の方系がダウンした場合は ログインしたことのあるサーバーへのアクセスでは tomcat に認証情報

FUJITSU Software Systemwalker for Oracle V15 (15.1) 紹介資料

FUJITSU Software Systemwalker Centric Manager Lite Edition V13.5 機能紹介資料

会社概要 名称 : 株式会社日本総研ソリューションズ JRI Solutions, Limited. 設立 : 2006 年 7 月 資本金 : 50 億円 従業員 : 1,300 名 株主 : 株式会社日本総合研究所 代表者 : 代表取締役社長兼最高執行役員小名木正也 所在地 : 東京本社 東京都

スライド 1

今さら聞けない!? Oracle入門 ~前編~

CLUSTERPRO MC RootDiskMonitor 1.0 for Windows FAQ 集 2013(Mar) NEC Corporation 導入に関する質問 運用に関する質問 動作環境に関する質問

Microsoft Word - ESX_Restore_R15.docx

intra-mart WebPlatform/AppFramework

【Cosminexus V9】クラウドサービスプラットフォーム Cosminexus

ETOS 画面の Web 化 / 帳票印刷のオープン化体験お試し変換サービスのご紹介 ACOS-4 システムの業務改善提案

CLUSTERPRO MC ProcessSaver 2.1 for Windows 構築ガイド 2016(Mar) NEC Corporation はじめに 責任範囲 適用範囲 概要 事前準備 クラスタ設定

日立ディスクアレイサブシステム環境強化サポートオプション

ソフト活用事例③自動Rawデータ管理システム

目次はじめに 必要システム環境 インストール手順 インストール前の注意点 インストールの準備 (.NET Framework3.5 SP1 のインストール ) ライセンスの登録 初期設定情報の入力... 8

CLUSTERPRO MC RootDiskMonitor 2.3 for Windows インストールガイド 2018(Jun) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール 本製品のアップデートインストール

はじめにお読みください

HashMapからConcurrentHashMapへの移行

CLUSTERPRO MC RootDiskMonitor 1.0 for Windows インストールガイド 2013(Mar) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール

組込み Linux の起動高速化 株式会社富士通コンピュータテクノロジーズ 亀山英司 1218ka01 Copyright 2013 FUJITSU COMPUTER TECHNOLOGIES LIMITED

WebView のハング:- java.lang.OutOfMemoryError

トラブルシューティング集

Arcserve Replication/High Availability 製品の仕組み

まえがき 2011 年 11 月 1 日 ver1.0 [ 初版 ] 本手順書では vcenter サーバが管理する仮想コンピュータを Acronis Backup & Recovery 11 エージェント for ESX(i)( バーチャルアプライアンス ) を用いてバックアップする手順をご紹介し

CLUSTERPRO MC ProcessSaver 1.0 for Windows 構築ガイド 2012(Sep) NEC Corporation はじめに責任範囲適用範囲概要事前準備クラスタ設定

MIRACLE MH for SNMP サポート SLA( サービスレベルアグリーメント ) ML-CS-0747 本書は サイバートラスト株式会社 ( 以下 サイバートラスト ) が MIRACLE MH for SNMP サポート ( 以下当サポートサービス ) の内容について説明するものである


V8.1新規機能紹介記事

Pervasive PSQL v11 のベンチマーク パフォーマンスの結果

PowerPoint プレゼンテーション

今さら聞けない!? Oracle入門 ~後編~

Arcserve Backup r16 新機能 テープブロックサイズの拡張 効果実測 Arcserve Japan 1.5 版

JP1 Version 12

改版履歴 版数改版履歴改版年月日 1.0 新規作成 2015/03/31 Page 2 NEC Corporation 2015

ENI ファーマシー受信プログラム ユーザーズマニュアル Chapter1 受信プログラムのインストール方法 P.1-1 受信プログラムのシステム動作環境 P.1-2 受信プログラムをインストールする P.1-9 受信プログラムを起動してログインする P.1-11 ログインパスワードを変更する

JS2-14 マルチコアCPU時代の Javaプログラミング

スライド 1

JP1 Version 11

改訂履歴 項番版数作成日 / 改訂日変更箇所変更内容. 平成 28 年 5 月 3 日新規章構成の変更, 分冊化に伴い新規作成 (i)

改版履歴 版数改版履歴改版年月日 1.0 新規作成 2013/03/ OverAction と DiskStallAction の値変更 (ActionNone ServiceCmdDisable ProcessOfRdmstatKillEnable ServiceCmdEnable)

Vantage Analyzer 機能検証結果報告書

商標類 Microsoft は, 米国およびその他の国における米国 Microsoft Corp. の登録商標です Microsoft Office は, 米国 Microsoft Corp. の商品名称です Microsoft Excel は, 米国 Microsoft Corp. の商品名称です

レベルアップ詳細情報 < 製品一覧 > 製品名 バージョン < 追加機能一覧 > 管理番号 内容 説明書参照章 カナ文字拡張対応 < 改善一覧 > 管理番号 内容 対象バージョン 説明書参照章 文字列のコピー ペースト改善 ~ 子画面の表示方式 ~ 履歴の詳細情報 ~ タブの ボタン ~ 接続時の管

オンラインドクター

KDDI ビジネスメール 一般ユーザ用カスタマーコントロール操作ガイド Ver.2.04 Copyright , KDDI Corporation All rights reserved 1

(ch2 + i)->next = ch1 + r; doit(ch1, ch2); 図 1 ランダムアクセスする C ソース 時間 (elapsed) 32 ビットプログラム (gcc -O2 -m32 でコンパイル ) 6.23 秒 秒 64 ビットプログラム (gcc -O2 -m

目次 第 1 章はじめに 電子入札システムを使用するまでの流れ 1 第 2 章 Java ポリシーを設定する前に 前提条件の確認 2 第 3 章 Java のバージョンについて Java バージョン確認方法 Java のアンインストール ( ケース2の

Red Hat Enterprise Linuxのcron(8)デーモンにデフォルト定義されたtmpwatch命令の動作による、WebOTXのトラブル対処方法

Microsoft Word - Wyse Thin Client&XD設定手順1112.doc

CLUSTERPROXSingleServerSafe SingleServerSafe ご紹介 2007 年 10 月

アーカイブ機能インストールマニュアル

<< 目次 >> 1 PDF コンバータのインストール ライセンスコードの入力 PDF にフォントを埋め込みたい場合の設定 PDF オートコンバータ EX で使用しない場合 PDF コンバータ単体で使用する場合の説明 PDF コンバータのアン

winras.pdf

TFTP serverの実装

PowerPoint プレゼンテーション

Microsoft Windows Internet Explorer は 米国 Microsoft Corporation の 米国およびその他の国における登録商標または商標です Linux は Linus Torvalds 氏の日本およびその他の国における登録商標または商標です Red Hat

独立行政法人 鉄道建設 運輸施設整備支援機構 電子入札システム 初期設定マニュアル 2019 年 4 月

CLUSTERPRO MC StorageSaver for BootDisk 2.1 (for Windows) インストールガイド 2016(Mar) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール

Microsoft Windows Internet Explorer は 米国 Microsoft Corporation の 米国およびその他の国における登録商標または商標です Linux は Linus Torvalds 氏の日本およびその他の国における登録商標または商標です Red Hat

intra-mart ワークフローデザイナ

SDP Generator

はじめに SDP Generator は オーバーレイに対応した JVC カメラに画像をインポートするデータファイル (SDP ファイル ) を生成するためのアプリケーションです 本アプリケーションを使用することで スコアボードのチーム名に チームロゴや画像化された多言語の文字をカメラ映像に表示する

Linkexpress トラブル初期調査資料 採取コマンド使用手引書

ホームページ・ビルダー サービス「ライトプラン」

Microsoft PowerPoint - ソフトウェア更新手順書_DAN-W62_mac_ _1.ppt

2015 TRON Symposium セッション 組込み機器のための機能安全対応 TRON Safe Kernel TRON Safe Kernel の紹介 2015/12/10 株式会社日立超 LSIシステムズ製品ソリューション設計部トロンフォーラム TRON Safe Kernel WG 幹事

PowerPoint プレゼンテーション

Rational Roseモデルの移行 マニュアル

プレポスト【問題】

目次 第 1 章はじめに 本ソフトの概要... 2 第 2 章インストール編 ソフトの動作環境を確認しましょう ソフトをコンピュータにセットアップしましょう 動作を確認しましょう コンピュータからアンインストー

"ソフトウェア カフェテリアサービス向けソフトウェア説明書

Microsoft PowerPoint - FormsUpgrade_Tune.ppt

ダイアグファイルの取得方法

改訂履歴 項番版数変更理由変更箇所作成日備考 初版 分冊化 事前準備編 Internet Explorer 版 事前準備編 Netscape 版 操作手順編 ベンダサポート終了 2.2 WinNT サポート終了 新規サポート

監査ログ分析機能 ソフトウェア説明書

注 ) CDをセットしてから プログラムが起動するまでの時間はパソコン CDドライブの性能によって差がありますが 概ね10 秒程度です 1 分間待ってもプログラムが起動しない場合は もう一度 CDをセットしなおしてください それでも起動しない場合 CDからの自動起動が無効になっている可能性があります

相続支払い対策ポイント

150423HC相続資産圧縮対策のポイント

ハピタス のコピー.pages

Copyright 2008 All Rights Reserved 2

<試験日時の設定>

改版履歴 版数改版履歴改版年月日 1 新規作成 2013/3/29 2 TESTIO_MODE を追加 OVER_ACTION VG_STALL_ACTION の設定値を変更 2013/9/30 3 CLUSTERPRO MC StorageSaver for BootDisk (for Linux

Windows2000/XPインストール手順

仮想化基礎演習テキスト Ⅰ 第 1.0 版 演習で学ぶ仮想化基礎 ( クライアント仮想化編 ) 九州ラーニングネット株式会社 特定非営利活動法人パソコン整備士協会

PDFオートコンバータEX

ホームページ・ビルダー サービス「ライトプラン」

intra-mart Accel Platform

1

Transcription:

y1 2 0 1 0. J a n u a r

Contents 1. Stop the World -ミッションクリティカルシステムを止めない... 1 2. Java TM VMのメモリ管理とガーベージコレクション... 2 2.1 ガーベージコレクションとは... 2 2.2 Java VMのメモリ管理方式... 2 2.3 Copy GCとFull GC... 2 2.4 Stop the World への従来のアプローチ... 3 3. Full GCレス を実現する最新技術... 5 3.1 Full GC 発生の要因... 5 3.2 明示管理ヒープ領域によるFull GCの抑止... 5 3.3 Full GCレス機能の仕組み... 8 3.4 Javaヒープ使用量とレスポンスタイムの変化... 11 3.5 Copy GC 発生時の処理コストの変化... 11 4. まとめ... 12 < 本書での表記 > Java VM: Java Virtual Machine 商標 Java 及びすべての Java 関連の商標及びロゴは 米国及びその他の国における米国 Sun Microsystems,Inc. の商標または登録商標です その他記載の会社名 製品名は それぞれの商標もしくは登録商標です All Rights Reserved. Copyright 2009, 2010, Hitachi, Ltd.

1. Stop the World -ミッションクリティカルシステムを止めないここ数年 銀行 証券 為替といった金融分野などのミッションクリティカルシステム すなわち止まることを許されないシステムでも Java を基盤とした Web システムを適用することが多くなってきています しかし Java VM のメモリ管理を考慮したプログラム設計とパラメータチューニングを行っても 稼働後 予想以上の高負荷になると性能上のトラブルが発生するという事例が後を絶ちません 順調に動いていた Web システムが ある時突然応答を返さなくなり しばらくするとまた動き出す そのような事象に不安を感じてはいませんか? Java を基盤とした Web システム環境では避けられないこの現象は Java VM のガーベージコレクション (GC) 中でも Full GC と呼ばれるものが原因です Java VM には Java を基盤としたシステムのメモリ管理者としての役割があります 使われなくなったメモリは Java VM がガーベージコレクションを行うことで回収します ただし このガーベージコレクションの間 実行中のすべてのアプリケーションプログラムは停止します これが Stop the World と呼ばれる現象です Stop the World は Web システムのレスポンスの遅延やスローダウン スループットの低下の要因となります 近年 Web システムは大規模化 複雑化し 業務で参照 更新するデータのサイズはさらに大きくなってきています 巨大なデータには 64bit OS を適用することで対応できます しかし Java VM が扱うメモリを増やすと ガーベージコレクションはより長時間化するため この問題はさらに深刻なものとなります 本冊子では まず Java VM のメモリ管理とガーベージコレクションについて説明します その後 日立の Cosminexus V8 が可能にした 日立独自のメモリ管理方式による Full GC レス機能 をご紹介いたします 1

2. Java VM のメモリ管理とガーベージコレクショ ン 2.1 ガーベージコレクションとは Java のプログラムでは 使用済みメモリを明示的に削 除する必要がありません 不要になったメモリは Java VM によって自動的に回収されるためです 業務処理が進むと 図 2-1 の左図のように 使用済みの領域と使用中の領域が混在し 使用できるメモリ領域が減っていきます Java VM は 使用できるメモリ領域が少ないことを検知すると ガーベージコレクションを実行します ガーベージコレクションでは 使われなくなった領域を回収して 空き領域を作る処理が行われます これにより 大きな空き領域が作られます ガーベージコレクション (GC) とは Java VMが管理するメモリ領域中の使用済みのメモリ領域を回収し 空き領域を作ること使用領域使用領域 使われなくなった領域空き領域 GC 前のヒープ領域 GC 空き領域 GC 後のヒープ領域 図 2-1 ガーベージコレクションによる使用済み領域の回収と空き領域の作成 2.2 Java VM のメモリ管理方式 ここで Java VM のメモリ管理方式について説明します Java VM のプロセスは Java ヒープ Perm ヒープ C ヒープ およびスレッドスタックという四つのメモリ領域を保持しています メモリ領域の構成を図 2-2 に示します ガーベージコレクションは Java ヒープと Perm ヒープに対して行われます Java ヒープ GC の対象 Perm C ヒープスレッドヒープスタックトランザクション処理中のメモリ使用領域の変動は少ない 業務プログラム J2EE サーバ 領域用の Eden Survivor が使う領域使用領域退避領域できたての使用中の年齢の古いオブジェクトオブジェクトをオブジェクトをを配置する領域配置する領域配置する領域 Java ヒープ Java アプリケーションが使用するメモリ領域 Perm ヒープクラスなどのメタ情報を格納する領域 C ヒープ Java VM や C プログラムが使用するヒープ領域スレッドスタックスレッドごとに保持するスタック領域 図 2-2 Java VM が管理するメモリ領域の構成 Java VM が管理するメモリ領域の中で ガーベージコレクションの発生に大きく影響するのは Java ヒープです Java ヒープとは 業務処理で使用されるメモリ領域です Java ヒープは 領域と 領域の二つに大別できます 領域はさらに Eden 領域と Survivor 領域に分けられます 生成されたオブジェクトは まず 領域中の Eden 領域に配置されます ガーベージコレクションが実行されると 使用中のオブジェクトが Survivor 領域に移動します 使用期間の長いオブジェクトは 何度かのガーベージコレクションを経て 領域に移動します このため 領域には生成されてから間もないオブジェクトが 領域には使用期間の長いオブジェクトが存在することになります 2.3 Copy GCとFull GC 使用できるメモリ領域が少なくなると Copy GC または Full GC のどちらかのガーベージコレクションが発生します Copy GC は 領域の Eden 領域がいっぱいになると発生します Copy GC の対象は 領域です 領域にある使用中のオブジェクトを他の領域に移動し 使用済みのオブジェクトをすべて削除します そして 一定回数以上の Copy GC を超えて使用され続けている 領域のオブジェクトを 領域に移動します Eden 領域がいっぱいになると Copy GC が起こる Eden S1 S2 業務プログラム 使用領域 Eden S1 S2 業務プログラム使用領域 図 2-4 Full GC オブジェクトの配置に利用できない領域 使用中のものは隣の領域に移動図 2-3 Copy GC Full GC は 領域の業務プログラム使用領域がいっぱいになると発生します Java ヒープ全体を対象として 使用済みのオブジェクトを削除します 領域にある使用済みのオブジェクトが削除されるのは Full GC が発生したときだけです 領域の業務プログラム使用領域がいっぱいになると Full GC が起こる オブジェクトの配置に利用できない領域 2

Copy GC Full GC 双方を比較してみると 表 2-1 のよう になります 表 2-1 Copy GC と Full GC の比較 範囲 発生タイミング 実行にかかる時間 Copy GC 領域 Eden 領域がいっぱいになった時 Full GC 全領域 領域の業務プロ グラム使用領域がい っぱいになった時 0.01~ 0.7 秒 1 秒 ~ 数十秒 ここで問題となるのは GC の実行にかかる時間です Copy GC の実行にかかる時間は 使用中のオブジェクトの数に依存します 一方 Full GC の実行にかかる時間は GC の対象となるメモリ領域全体のサイズに依存します アプリケーションサーバのように 500M バイトから 1G バイト近くのメモリサイズを使用する場合 Copy GC は 0.01 秒から 0.7 秒程度と1 秒に満たない間に終了します しかし Full GC は Java ヒープ全体を対象とするため Copy GC に比べて時間がかかります その値は 1 秒から数十秒とされ Java ヒープが 10G バイトある場合などには 30 秒以上かかることもあります 通常は だいたい数秒ほどの実行時間がかかります 2.4 Stop the World への従来のアプローチ 従来は Full GC による数十秒にも及ぶ業務停止を避けるために GC のアルゴリズムを工夫する方法がとられてきました GC のアルゴリズムには 一般に以下の方法が存在します GC の種類 ノーマル GC Copy GC 領域 特徴 長所 スループットが高い GC 発生頻度の見積もりが容易短所 Copy GC Full GC 時に全スレッドが停止する Copy GC Full GC を一つのスレッドで実行するため 業務処理停止時間が長い 領域 領域でのオブジェクトの移動処理 Java ヒープ全体の詰め直しは行わないため短時間で済む Full GC 領域から 領域への移動処理, 全領域のオブジェクトの生死を判定 Java ヒープ全体の詰め直しを行うために時間がかかる 図 2-5 ノーマル GC の特徴 (2) パラレル GC ノーマルGCとは異なり GCを複数のスレッドで並列に実行することで GC による処理停止時間を短くしよう というものです ただし GC を並列化して実行することの副作用が伴います 例えば スレッドローカルに GC を行うためにヒープ領域内を細分化する必要があります これが要因で GC の発生間隔が短くなってしまう場合もあります (1) ノーマル GC デフォルト GC ともいいます 前述した仕組みで Copy GCとFull GCの二つの GCを実施します GC 発生時点で全実行スレッドを停止して GC スレッドという一つのスレッドのみでGCを実行するというのが特徴です GC の種類パラレル GC 特徴長所 並列処理する Copy GC が速い短所 Full GC はノーマル GC と同じ 並列処理用に領域を細分化するため Copy GC の発生頻度は高い Copy GC 領域 領域 ノーマル GC の Copy GC 同様の処理と 領域から 領域への移動処理を並列に行う 並列処理のため 領域内は細分化している 図 2-6 パラレル GC の特徴 3

(3) コンカレント GC コンカレント GC では 業務スレッドと GC スレッドの実行を並行して行います GC が動作している間は業務処理のスループットが低下するというデメリットがありますが CPU のマルチコア化に伴い その問題は克服されつつあります ただし 業務処理と GC を同時に動作させることによる副作用があります そのひとつが フラグメンテーションの問題です 図 2-8 に示すように GC 処理の間も業務スレッドが並行して動作しているため 使用中の領域の詰め直しができません そのため ヒープ領域が断片化してしまい 空きメモリサイズはあるのに連続領域が取れなくなり 結果的に Full GC が発生する場合があります GC の種類特徴長所 Full GC の発生頻度が低い短所 GC 専用のスレッドが常時処理を行うためコンカレントスループットが低い GC Copy GC はノーマル GC と同じ GC 発生頻度の見積もりが困難 フラグメンテーションの発生によりメモリの有効活用が困難 使用領域 使用領域 ( 動作中なので移動できない ) GC 使われなくなった領域 GC 前のヒープ領域 空き領域 空き領域 GC 後のヒープ領域 GC 処理間も業務スレッドが動作しているため 使用中の 領域の詰め直しができない 図 2-8 コンカレント GC でのフラグメンテーションの問題以上のように GC アルゴリズムを使用することで GC の発生頻度や処理時間を低減できる場合もあります しかし Full GC の発生自体は避けられません これが Stop the World と長年 技術者を悩ませてきた問題の根本原因です コンカレント GC のスレッド処理の流れ 業務処理停止 :GCスレッド 調査開始 業務処理 整合性確保 停止 : 業務スレッド 領域を通常の処理と並列に処理する GC スレッドが業務スレッドで実行中のオブジェクトの生死を調査する Copy GC とは別に 定期的に全スレッドを停止させてオブジェクト生死調査の整合性を保つ 詰め込みは行わず 空き領域はフリーチェインで管理する フラグメンテーションなどによってメモリを確保できなくなった場合は ノーマル GC と同じように Full GC を行う 図 2-7 コンカレント GC の特徴 4

3. Full GC レス を実現する最新技術 3.1 Full GC 発生の要因 Java ヒープ Eden Survivor 業務プログラム J2EE サーバが使用領域使う領域 領域用の退避領域 ここで Cosminexus アプリケーションサーバが搭載している Full GC の発生を抑止する機能 (Full GC レス機能 ) についてご紹介します Cosminexus アプリケーションサーバでは 従来のアプローチであるガーベージコレクションのアルゴリズムの変更ではなく Java ヒープの使い方そのものを工夫することで Full GC を抑止します これによって Stop the World を解消します Java ヒープの 領域に配置されたオブジェクトのうち 使用期間の短いもの ( 短命なオブジェクト ) は 領域で削除され 使用期間の長いもの ( 長寿命なオブジェクト ) は 領域に移動します これを Web アプリケーションサーバに当てはめて考えると トランザクションのような短時間で完了する処理で使われるオブジェクトは ほかの領域に移動する前に使用済みになるため 領域で削除されます 一方 セッション情報のように クライアントユーザーのログインからログアウトまでの長時間にわたって使用されるオブジェクトは 領域から 領域に移動していきます 図 3-1 で見ると クライアントユーザーがログインして 商品表示 商品購入 というトランザクションがそれぞれ実行されていきます これらのトランザクションは短時間で終了するため 作成したオブジェクトは 領域で Copy GC によって削除されます 一方 ログインからログアウトまでの情報を保持するセッション情報は 領域に移動します セッション情報は クライアントユーザーがログインするたびに作成され 領域に移動します 領域に移動したセッション情報は Copy GC では削除されません これを繰り返していくと 領域がいっぱいになってFull GC が発生することになります つまり Web アプリケーションサーバの場合 セッション情報のような使用期間が長い特定のオブジェクトの蓄積が Full GC 発生の要因となっているのです 短命な 長寿命な Full GC オブジェクト オブジェクト 発生 トランザクション処理 セッション情報 で使用するメモリなど 使用後 Copy GC で ログアウト後も 削除される 削除されないで残る Web/AP サーバ DB サーバ トランザクション Web Java EE サーバ ログイン Server 商品表示 セッション 商品購入 情報 A ログアウト 業務プログラム クライアント 図 3-1 Web アプリケーションサーバでの Full GC 発生の要因 3.2 明示管理ヒープ領域による Full GCの抑止 Cosminexus アプリケーションサーバではメモリ管理の仕組みそのものを変更することで Full GC による Stop the World を解消しました これは 使用期間の長いオブジェクトをガーベージコレクションの対象外の領域で管理するというものです ガーベージコレクションの対象外にする領域を明示管理ヒープ領域といいます 明示管理ヒープ領域とは 長寿命なオブジェクトを配置する領域です オブジェクトの使用期間が過ぎると オブジェクトが配置されていた領域は明示的に削除されます オブジェクトの明示管理ヒープ領域への配置は Cosminexus アプリケーションサーバが自動で行う場合と ユーザが指定する場合があります 1 Cosminexus アプリケーションサーバが自動で行う場合 Cosminexus アプリケーションサーバは セッションに関連するオブジェクトを自動的に 明示管理ヒープ領域に配置します 2 ユーザが指定する場合 1 以外に 明示管理ヒープ領域で管理したいオブジェクトが有る場合は ユーザがそのオブジェクトのクラス名を自動配置設定ファイルに記述することで 1と同様に 明示管理ヒープ領域で管理するようになります 5

まず 1について Cosminexus アプリケーションサーバがセッションに関連するオブジェクトを自動的に配置する明示管理ヒープ領域上のオブジェクトの配置先を図 3-2 に示します セッション情報は自動的に明示管理ヒープ領域に配置されるため 領域にセッション情報が蓄積されることはありません 明示管理ヒープ領域に配置されたセッション情報は 不要になると Cosminexus アプリケーションサーバによって削除されます 明示管理ヒープ領域適用前 領域業務定義情報 コネクショスレッドンプールプール 明示管理ヒープ領域適用後 領域業務定義情報 コネクショスレッドンプールプール明示管理ヒープ領域 Java ヒープ Eden Survivor 明示管理ヒープ ログイン商品表示商品購入ログアウトクライアント ( セッション情報 ) ログアウト後に削除される 業務プログラム使用領域 Web/AP サーバ Web Java EE サーバ Server セッション情報 A 業務プログラム J2EE 領域用のサーバが退避領域使う領域 短命な 長寿命な Full GC レス オブジェクト オブジェクト セッション情報が蓄積しない DB サーバ 図 3-2 明示管理ヒープ領域を使用した場合のオブジェクトの配置先明示管理ヒープ領域を適用する前後の 領域のイメージを図 3-3 に示します 適用前は 業務定義情報 コネクションプール スレッドプール セッション情報など すべての長寿命なオブジェクトが 領域に移動します 一方 適用後は セッション情報が自動的に明示管理ヒープ領域に移動されるため 領域に移動しません これによって 不要になったオブジェクトで 領域がいっぱいになることを防ぎ Full GC によるオンライン業務の長時間停止を発生させません セッション情報 一定期間後に破棄される : 業務プログラムのオブジェクト セッション情報は :Cosminexus アプリケーションサーバが作成するオブジェクト 明示管理ヒープ領域に配置 図 3-3 明示管理ヒープ領域適用前後の 領域の違い利用者から見た明示管理ヒープ領域適用の効果を図 3-4 に示します Full GC 応答時間 ( 秒 ) 15.0 10.0 5.0 時間応答なし応答時間 ( 秒 ) 15.0 Full GC レス 10.0 5.0 時間快適! ログアウト後も Full GC 発生までセッション情報が残存ログイン商品表示従来方式 Java ヒープ商品購入 領域 領域 Full GC ログアウト発生 新方式 Java ヒープ明示管理 領域 領域ヒープセッション情報を GC 対象外である明示管理ヒープに配置し Full GC 発生を抑止 図 3-4 明示管理ヒープ領域適用の効果 6

次に 2について ユーザ指定により Cosminexus アプリケーションサーバが特定のオブジェクトを明示管理ヒープ領域に配置するイメージを図 3-5 に示します まず 領域増加要因調査機能を使用して 領域増加原因クラス名をログファイルに出力します 次に ユーザがログファイルを参照し 明示管理ヒープ管理領域へ移動するオブジェクトのクラス名を記述する自動配置設定ファイルを編集します Cosminexus アプリケーションサーバは 自動配置設定ファイル中のクラス名を参照し 領域の外にある明示管理ヒープ領域に配置します また 明示管理ヒープ領域へ移動したオブジェクトは 使用されなくなった時点で Cosminexus アプリケーションサーバによって 削除されます Full GC 応答時間 ( 秒 ) 15.0 10.0 5.0 時間 領域が増加従来方式 Javaヒープ 領域 領域 Full GC 発生 1 領域増加原因クラス名出力 ログファイル 2 自動明示管理ヒープ領域移動クラス名指定 配置設定ファイル 応答時間 ( 秒 ) 15.0 10.0 5.0 Full GC レス 時間 新方式 Javaヒープ 領域 領域 明示管理ヒープ 快適! 領域増加原因となるクラスを明示管理ヒープに配置し Full GC 発生を抑止 図 3-5 ユーザ指定による明示管理ヒープ領域への 配置手順 従来の Java ヒープだけ使用する方式では セッション情報などの長寿命なオブジェクトの蓄積に伴って定期的に Full GC が発生したため 利用者が 応答なし と感じる時間がありました 新方式である明示管理ヒープを適用することで 領域へのセッション情報の蓄積がなくなり Full GC の発生が抑止されます このため 利用者は常に快適に操作を続けることができます このように Full GC 発生の要因となる長寿命のオブジェクトを GC 対象外の領域に配置し Full GC の発生を抑止するのが Cosminexus アプリケーションサーバの Full GC レス機能です 7

3.3 Full GC レス機能の仕組み 3.3.1 Cosminexus アプリケーションサーバがセッションに関するオブジェクトを自動的に明示管理ヒープ領域に配置する場合 Cosminexus アプリケーションサーバでは 長寿命なオブジェクトのうち セッション情報などを自動的に明示管理ヒープ領域に配置します 業務プログラムに対応して Cosminexus アプリケーションサーバが明示管理ヒープ領域とどのように連携するかの例を図 3-6に示します (1) セッションの生成業務プログラムがセッションを生成すると Cosminexus アプリケーションサーバでセッションの生成が行われます この時に明示管理ヒープ領域が確保されます (2) オブジェクトの生成およびセッションへのオブジェクトの格納 ユーザがオブジェクトを生成し セッションにオブジェクトを格納すると 明示管理ヒープ領域上のセッション情報格納用の領域と オブジェクトが関連付けられます セッションと関連付いたオブジェクトは Copy GC が発生したタイミングで明示管理ヒープ領域に移動します (3) オブジェクトの生成およびセッションへのオブジェクトの格納セッションにほかのオブジェクトを格納した場合も (2) と同様に処理されます (4) セッションの終了セッションの利用が終了すると明示管理ヒープ領域は削除されます このように 明示管理ヒープ領域の取得 関連付け 削除は Cosminexus アプリケーションサーバが行います 業務プログラムの変更は不要です 業務プログラム (1) セッションの生成 HttpSession session = request.getsession(); Cosminexus アプリケーションサーバセッションの生成明示管理ヒープ領域確保 明示管理ヒープ領域 (2) オブジェクトの生成およびセッションへのオブジェクトの格納 Object obj1 = new UserObject1(); session.setattribute(key1, obj1); 領域 関連付け Copy GC で移動 (3) オブジェクトの生成およびセッションへのオブジェクトの格納 Object obj2 = new UserObject2(); session. setattribute(key2, obj2); Copy GC で移動 (4) セッションの終了 session.invalidate(); 明示管理ヒープ領域削除 削除 : 業務プログラムのオブジェクト :Cosminexusアプリケーションサーバが作成するオブジェクト 図 3-6 業務プログラムに対応した Cosminexus アプリケーションサーバと明示管理ヒープ領域との連携 ( その1) 8

なお セッションの終了後に削除される明示管理ヒープ領域には 複数のセッションから参照されているオブジェクトなど まだ使用中のオブジェクトが含まれている可能性があります 明示管理ヒープ領域のオブジェクトが複数のセッションから参照されている例を図 3-7に示します この場合 単純に明示管理ヒープ領域を削除することができません これを防ぐため 明示管理ヒープ領域を削除する際には 使用中のオブジェクトを検出する処理が実行されます 使用中のオブジェクトが検出された場合は Java ヒープ領域に移動します この処理によって 明示管理ヒープ領域を削除したあとのシステムが問題なく動作できるようにして システムの堅牢性を確保しています 明示管理ヒープ 削除 参照 参照 Java ヒープ 使用中オブジェクトを検出して移動 図 3-7 使用中オブジェクトの検出と移動 9

3.3.2 ユーザが明示管理ヒープ領域に配置するオブジェクトを指定する場合 Cosminexus アプリケーションサーバでは 長寿命なオブジェクトのうち ユーザが指定したオブジェクトを自動的に明示管理ヒープ領域に配置します 業務プログラムに対応して Cosminexus アプリケーションサーバが明示管理ヒープ領域とどのように連携するかの例を図 3-8に示します (1) 自動配置設定ファイルの入力 Java VM が起動されると 自動配置設定ファイルから 明示管理ヒープ領域へ配置するクラス名の情報を読み込みます (2) オブジェクトの生成ユーザが (1) で読み込んだクラスのオブジェクトを生成した時点で 明示管理ヒープ領域を確保し オブジェクトを 明示管理ヒープ領域上に生成します (3) 関連するオブジェクトの生成および関連付け (2) で生成したオブジェクトと今回生成したオブジェクトが関連付けられます このオブジェクトは Copy GC が発生したタイミングで明示管理ヒープ領域に移動します (4) 明示管理ヒープ領域の削除オブジェクトおよび関連付いたオブジェクトが不要となった時点で 明示管理ヒープ領域は削除されます 明示管理ヒープ領域の削除は 3.3.1 と同様に 使用中のオブジェクトを検出し 使用中のオブジェクトに対しては Java ヒープ領域に移動することで 明示管理ヒープ領域を削除したあとのシステムが問題なく動作できるようにして システムの堅牢性を確保しています このように 明示管理ヒープ領域の取得 関連付け 削除は Cosminexus アプリケーションサーバが行います 業務プログラムの変更は不要です 業務プログラム (1)Java プログラムの開始 (2) 自動配置設定ファイルで指定したオブジェクトの生成 ClassA obj1 = new classa(); Cosminexus アプリケーションサーバ Java VM の起動 明示管理ヒープ領域確保 自動配置設定ファイル ClassA 明示管理ヒープ領域 (3) 関連するオブジェクトの生成および関連付け ClassB obj2 = new classb(); obj1.mem = obj2; 領域 関連付け (4) オブジェクトの解放 obj1 = null; obj2 = null; 明示管理ヒープ領域削除 Copy GC で移動 削除 : 業務プログラムのオブジェクト :Cosminexusアプリケーションサーバが作成するオブジェクト 図 3-8 業務プログラムに対応した Cosminexus アプリケーションサーバと明示管理ヒープ領域との連携 ( その2) 10

3.4 Javaヒープ使用量とレスポンスタイムの変化実際に Full GC レス機能を利用した場合の Java ヒープ使用量の変化を図 3-9に示します これはあるシステムの規模を縮小し 再現した環境での測定結果です 従来はオンライン業務を繰り返すと Full GC が定期的に発生していたのが Cosminexus アプリケーションサーバの Full GC レス機能により Full GC 発生が抑止され Java ヒープ使用量が安定動作していることがわかります Cosminexus 動作時の Java ヒープ使用量変化 3.5 Copy GC 発生時の処理コストの変化これまでに説明したように Full GC レス機能を使用することで オンライン業務の長時間停止を防ぎ システムの安定稼働を実現できます ただし Copy GC 発生時の処理時間という点に絞って見た場合 処理時間は増加します Copy GC 発生時に 明示管理ヒープ領域に移動するオブジェクトの候補の解析処理と 領域中のオブジェクトを 領域と明示管理ヒープ領域のどちらに移動するかを判定する処理が発生するためです 350000 300000 250000 200000 150000 100000 50000 Full GC の発生で全業務が一時的に停止 Full GC レス機能で Full GC の発生なし 従来 Full GC レス機能使用 GC 処理中 GC 処理後 明示管理ヒープ Java ヒープ 移動先判定の処理コストが増加最大 30% 増 0 Full GC レス を実現し GC 対象外領域 ( 明示管理ヒープ ) でメモリ大容量化対応! 図 3-9 Java ヒープ使用量の変化 Full GC が抑止されたことに伴うレスポンスタイムの変 化の例を表 3-1 に示します この例では レスポンスタイ ムとしてログインにかかる時間を比較しています なお 適用前の環境の Java ヒープサイズと 適用後の環境の Java ヒープと明示管理ヒープの合計サイズは同じです 表 3-1 レスポンスタイムの変化 Full GC レス機能適用前 Full GC レス機能適用後 Java ヒープサイズ 1024m 512m 明示管理ヒープサイズ 512m Full GC 発生回数 17 回 0 回 最大ログイン時間 (Sec) 2.343 0.204 平均ログイン時間 (Sec) 0.063 0.057 表 3-1 で示した結果から 最大ログイン時間が大幅に 改善されていることがわかります Full GC 発生回数が 0 になったことで Full GC の影響を受けるリクエストがなく なったためです これに伴い 平均ログイン時間も短縮さ れています 図 3-10 移動先の判定処理による処理コストの増加この処理によって Full GC レス機能を適用しない場合に比べて Copy GC にかかる処理時間が最大で 30% 増加することがあります ただし 一般的に 1 回の Copy GC にかかる時間は 数十 ms~ 数百 ms 程度と短いものです Copy GC の処理コスト増加は 処理性能全体に大きく影響はしません なお Full GC レス機能の適用によってオーバーヘッドが増加するのは 処理全体を通して Copy GC 時の処理コストだけです Copy GC 時間の増加によるスループットの変化を試算した例を表 3-2 に示します 表 3-2 Copy GC 時間増加によるスループットの変化 Full GC レス Full GC レス機能適用前機能適用後測定単位時間 10:00~15:45(20,700 秒 ) Copy GC 回数 1,658 回平均 Copy GC 時間 0.253 秒 / 回 0.328 秒 / 回処理件数 548,819 件 545,486 件平均 Copy GC 時間が 30% 増加したことに伴って減少する処理件数の割合は 0.61% です つまり この例の場合 Copy GC の処理コスト増加による処理性能への影響は 1% 未満であることがわかります このように Full GC レスという大きな効果に対して 副作用と考えられる影響が非常に小さいことも Full GC レス機能の特徴です 11

4. まとめ Web システムの課題である Stop the World Cosminexus アプリケーションサーバでは これを GC アルゴリズムの変更によって短縮するのではなく Full GC そのものを発生させない Full GC レス機能 によって解消します Full GC レス機能は Cosminexus アプリケーションサーバの高度な独自技術によって実現されています Full GC レス機能を使用する場合 Web アプリケーションの変更は不要です 稼働実績のあるアプリケーションを使用しながら Full GC レスの恩恵を享受し Web システムの安定稼働を実現できます 12

2010 年 1 月第 2 版発行お問い合わせ先 : 株式会社日立製作所ソフトウェア事業部販売推進部 cosminexus-s@itg.hitachi.co.jp Full GC 発生を抑止するメモリ管理技術 - Cosminexus の Full GC レス機能 インターネットで製品情報をご覧いただけます http://www.hitachi.co.jp/apserver/ http://www.cosminexus.com/