業務システムには、機能面や運用のしやすさはもちろんのこと、安定稼動のための信頼性が求められる。日立製作所のSOAプラットフォームである「Cosminexus(コズミネクサス)」のWebアプリケーションサーバは、サーバサイドJavaの標準技術であるJava EEに対応しながら、独自の技術を盛り込み、高い信頼性を実現している。先日開催された『ソフトウェア開発環境展(SODEC)2010』会場にて、同社のソフトウェア事業部の岩井智雄氏に、その特徴を聞いた。
SOAプラットフォーム「Cosminexus」
Cosminexusとは、SOAに基づくシステム構築・運用を実現するSOAプラットフォーム。その中核をなすWebアプリケーションサーバは、日立製作所がこれまで培ったミッションクリティカル技術を進化させ、「安定したレスポンス」「止まらないシステム」「トラブル対応が簡単」といったWebシステムを実現するために開発された。
岩井氏は「CosminexusのWebアプリケーションサーバの特徴は、拡張性、導入・運用性、生産性、保守性など、さまざまありますが、V8(バージョン8)からの目玉としてFull GCレスで『STOP The World』を解消できることが挙げられます」と切り出した。
独自の機能「Full GCレス」とは
JavaベースのWebシステムにおいては、Java仮想マシン(Java VM)のメモリ管理機能であるガベージコレクション(GC)が突然のレスポンス低下を引き起こすことが知られている。GCとは、Java VMが管理するメモリの作業領域(Javaヒープ)のうち、使用済みの領域を破棄して空き領域を整列させる仕組みのこと。
Javaヒープは、「New領域」と「Old領域」に大別され、Java VMにおけるGCには、「Copy GC」と「Full GC」の2種類がある。Copy GCは、New領域を対象に使用済みのインスタンスを削除する処理で、所要時間はごく短く、システムへの影響は少ない。これに対し、Full GCはJavaヒープ全体を対象とし、Old領域の使用領域がいっぱいになると発生する。この所用時間は1秒から数十秒と長く、実行中は処理が止まってしまう。
Old領域に残存する情報としては、ユーザーのログインが必要なサイトにおけるセッションオブジェクトが挙げられる。ユーザーを識別するためにセッション情報は必要なため、セッションオブジェクトは長寿命となり、ログオフ後はOld領域に残存し、Full GCでまとめて解放されるため、レスポンスの低下は避けられない。例えば、ショッピングサイトやチケット予約サイトで数十秒間システムの応答がなかったら、ユーザーは注文ができているかどうか不安に思い、何度も同じリクエストを送信してしまうかもしれない。
この問題に対処するため、Cosminexusでは、Java VMに『明示的ヒープ領域』を設け、これをGCの対象外とする方式を採用し、Full GCレスを実現した。Javaヒープ内に滞留するセッションオブジェクトなどを、明示的ヒープ領域に自動的に割り当て、Old領域に残るオブジェクト量を減らすことでFull GCを抑制するという仕組みだ。
「例えば、テーブルがすべて汚れた状態まで片付けをせず、片付けの間お客様を待たせているのがFull GCの状態です。空いたテーブルをこまめに片付け、待ち時間を与えずにお客様を案内できるのがFull GCレス機能です。他社製品の場合は、Full GCの発生間隔を長めにしたり、Full GCの処理自体を短くし、回復の時間を早めたりといった手法をとられていますが、Full GCレスは弊社独自の機能です」と岩井氏は語る。
セッションオブジェクトの明示的ヒープ領域への移動は、所要時間の短いCopy GCで行うため、システム全体のパフォーマンスにはほとんど影響しないという。日立製作所が行った試算では、Copy GCの時間は30%増加したものの、処理件数は0.61%の劣化、処理性能への影響は1%未満にとどまった。