止まることの許されないWebシステムが抱える |
ネットワークの進化とさまざまなアクセス経路の普及によって、レスポンス遅延などによるWebのシステム障害が多大な影響を及ぼすようになってきている。その状況に対して、日立製作所はSOAプラットフォーム「Cosminexus(コズミネクサス)」のアプリケーション基盤製品である「Cosminexusアプリケーションサーバ」により、堅牢で高性能なWebシステムの実現を支援する。「Cosminexusアプリケーションサーバ」は、Javaで構築されたWebシステムの安定稼働のボトルネックとなっていたメモリ領域の管理機能の改善や、高負荷時における安定稼働を実現する機能、さらにはWebシステム障害のボトルネックを特定する機能などを提供する
現在のWebシステムに求められる“信頼性” | ||
World Wide Webが登場してから20年近い月日が経過した。ブロードバンドや光回線などの普及によるネットワークの“進化”により、Webのトラフィックは莫大に増加している。その一方で、業務で使うWebシステムでは、ミッションクリティカルなシステムは銀行業務に限らず、システムの安定稼働が求められている。また、ECサイトやオンライントレード、ネットオークションなどの利用の増加や携帯電話の普及によるWebの“一般化”により、Webサイトのパフォーマンスを要求する指標も「8秒ルール」から「4秒ルール」へと変わり、果ては3秒、2秒……も我慢できないというレベルを要求されるようになってきている。
今回紹介する「Cosminexus アプリケーションサーバ」は、日立製作所(以下、日立)のSOAプラットフォーム「Cosminexus」のアプリケーション基盤を支える中核製品の1つだ。その主な特長は、Webサービス・システムが社会の重要なインフラになりつつある中、Java EE対応による基幹業務システムの“拡張性”や、流量制御・耐障害機能などの本番環境における安定稼働を実現する“信頼性”の強化である。
中でも注目すべきは、最新のバージョン8において、日立独自のメモリ管理方式による「Full GC(ガベージ・コレクション)レス機能」が新たに盛り込まれたことだ。
Javaシステムのボトルネックとなる「Full GC」、 そして「Stop The World」とは |
||
最近では、止まることが許されないミッションクリティカルな環境において、Javaを基盤としたWebサイト/システムを構築することが珍しくない。日立は、さまざまなシステム環境でJavaプログラムを実行するのに不可欠なJava VMのメモリ管理において、Webシステムの安定稼働のボトルネックとなっていたFull GCの発生を抑止し、オンライン業務の一時停止解消を可能にした。
では、Full GCとはいかなる問題を引き起こすものなのか。
Java VMでは、煩雑なメモリ管理を軽減するため、Javaのプロセスに従って「Javaヒープ」「Permヒープ」「Cヒープ」「スレッドスタック」と呼ばれる4つの領域で、メモリの確保と開放を自動的に行っている。特にJavaヒープは、アプリケーションプログラムの各種オブジェクトを格納する中心的領域のため、New領域とOld領域に分けて効率的に管理する。
しかし、使用済みのオブジェクトと使用中のオブジェクトが混在し、次第に断片化してメモリの空き領域が減っていくと、いったんはNew領域の中だけでメモリ領域の再編成(Copy GC)が行われる。その結果、使用済みのオブジェクトが削除されるが、使用され続けて削除されないオブジェクトが増えると、オブジェクトはOld領域に移される。さらにOld領域が満杯になると、JavaヒープとPermヒープ全体を対象に使用済みの領域を本格的に回収する処理、つまりFull GCが行われる(図1)。
問題は、Full GCが実行されている間はプログラムが動作できないため、アプリケーション/システムが一時的に停止してしまうことである。仮に、アプリケーションが500M〜1Gbytes近くのメモリサイズを使用する場合、Full GCに1秒〜数秒、場合によっては数十秒もの時間がかかってしまう。これがいわゆる「Stop the World」と呼ばれる現象である。Webシステムへのアクセス増大や、参照・更新するデータサイズも肥大化しつつある中、システム停止が頻繁に発生しやすくなるなど、Javaベースのシステムを利用するユーザー共通の悩みとなっている。
図1 一般の従来方式では、メモリ領域全体(New領域とOld領域)を対象とするFull GCが発生することでWebシステムのレスポンスが低下。一方、「Cosminexus アプリケーションサーバ」では、セッションオブジェクトを明示管理ヒープに格納することでFull GCの発生を抑止 |
日立独自のメモリ管理技術で Full GCの発生を回避 |
||
技術文書「Webシステムのボトルネックを回避するメモリ管理技術」では、Full GCレス機能を実現する最新技術の詳細が紹介されている。 |
その対策として、メモリ領域の拡張や、業務プログラムと並行してGCを動作させる手法などが試みられたが、回数は抑制できてもFull GCは回避できず、根本的な解決には至らなかった。
そんな中、日立ではさまざまな障害事例を調査・分析することで、GCアルゴリズムの変更で停止時間を短縮するのではなく、Cosminexusアプリケーションサーバ上にメモリ管理機能を設置するアイデアに着目。日立が開発したJava VMと連動させることで、Javaヒープ領域に滞留するセッションオブジェクトをGC対象外のEヒープ領域(明示管理ヒープ領域)に移動させる独自のメモリ管理を実現した(図1)。
この方法によって、長期間利用されるオブジェクトはOld領域ではなくEヒープ領域に格納されるため、“Full GCの発生”自体を回避し、システム停止を大幅に改善できるようになった。Webシステムの長年の課題だった「Stop the World」からの解放を、ハードウェアや業務アプリケーションを変更することなく実現したことが、ユーザー企業からの高い評価につながっている。Full GCレス機能を実現する最新技術の本質や仕組み、そして測定数値による効果の違いの詳細については、 技術文書「Webシステムのボトルネックを回避するメモリ管理技術」を参考にしてほしい。
このFull GCレス機能によって、例えばネットショッピングやオンライントレード、勤怠管理システムなど、セッション情報を多用したシステム停止が大きな問題となるWebサービス/システムでも安定性が確保できるようになった。さらに、ハードウェア集約のため、マルチコアや大容量メモリ搭載マシンを導入しても、サービス応答時間の劣化を心配する必要はなくなったといえる。
負荷増大時には、URL単位で 流量制御や優先制御を実施 |
||
ところが、Webサービス/システムの安定稼働には、Full GC回避のメモリ管理方法だけでは解決できない課題もある。例えばECサイトの場合、商品検索に想定以上のリクエストが集中し、商品購入など肝心の売上につながる処理が遅延することで利用者があきらめてしまい、売上につながらないケースがよく問題となる。このようなWebシステムの性能低下は、急激な負荷増大がもたらすリソース不足や、アクセスが集中する特定業務のCPUパワーの占有によって引き起こされることが多い。
Cosminexusアプリケーションサーバでは、そのような高負荷時における安定稼働を実現する機能を標準で提供している点にも注目したい。Webコンテナレベルでのスループットの確保のため、業務ロジック(URL)単位に専用キューを独立させ、アプリケーションの同時実行数を制限する流量制御や、優先度の高いアプリケーションの実行を保証する優先制御などを実施する(図2)。
図2 アプリケーションの同時実行を制限する流量制御や、優先度の高いアプリケーションの実行を保証する優先制御などでWebシステムの安定稼働を実現。業務ロジック(URL)単位にキューを設けてきめ細かな制御が可能 |
これにより、アプリケーション内に複数業務を持つ構成でも業務単位の制御が可能となっている。つまり、重い処理と軽い処理を別窓口とすることで、システム全体の性能低下を回避し、安定したスループットを実現しているわけだ。
さらに、EJB(Enterprise JavaBeans)アプリケーション間の動的負荷分散に加え、リクエスト単位の優先制御やEJB単位のサービス閉塞など、実績のあるトランザクション技術を取り入れたきめ細かな運用が可能なため、リクエストキューの滞留状態を監視し、自律的にスローダウンを検知してサービス閉塞や回復動作が実行されるようになっている。
トラブル解決のスキル依存度を 減らす「性能解析トレース機能」 |
||
それでも万一、Webサービス/システムで障害が発生した場合、原因分析やボトルネック個所の特定には時間がかかり非常に労力を要する。それは、Webサービス/システムが多くのコンポーネントの組み合わせで構成されているためで、それぞれのコンポーネントからログを採取し、タイムスタンプを手懸りにそれらを突き合わせ、問題の個所を特定するといった作業をこなすには相応の経験とスキルが求められる。
Cosminexusアプリケーションサーバには、そのような特定個人のスキルに依存することなく性能分析や障害発生時のトラブル解決を効率化できる「性能解析トレース機能」がある。
これは、Webブラウザの操作ログを始め、アプリケーションサーバ内のHTTPサーバ・Webコンテナ・EJBコンテナの各トレースログ、データベースログに至るまで、各機能のポイントごとのトレース情報を自動で取得し運用管理サーバに収集するものだ。これらのログには、クライアントからのリクエスト単位でユニークなIDが付与されるため、WebブラウザからDBまで一貫した性能分析を可能にし、障害発生のトリガーとなったリクエストの特定や性能チューニングによるボトルネック解消が容易にできる(図3)。
図3 性能解析・障害解析を効率化するトレース機能。リクエストごとにユニークなID(識別子)を付与してサーバ内の各処理ポイントでトレースを取得することで、性能チューニングや障害発生時のログ解析が容易になる |
さらに、Cosminexusの全プラットフォームに提供する日立製のJava VMは、日立基準での品質確保とトラブル解決機能を強化するとともに、ブラックボックスだったJava VMの挙動を可視化している。例えば、スタックトレースではメソッド内のローカル変数の内容が出力されることで、障害発生までの経緯を容易に特定可能だ。また、スレッドごとの消費CPU時間や待ち回数も取得できるため、性能障害につながる問題を早期に解決できる。
保守性という面では、Cosminexusアプリケーションサーバは、日立が長年培ったメインフレームの高信頼設計基準に基づいて開発されている。また、開発者との直接アクセスを可能にすることで、機能や性能に関する疑問や課題に対してもきめ細かくサポートするなど、日立ならではのサポート体制も充実させている。
Full GCレス機能の仕組みと効果を 分かりやすく理解できる技術文書 |
||
Webシステムの安定稼働実現には多くの課題が存在し、管理者にとって永遠のテーマといえるかもしれないが、Cosminexusアプリケーションサーバには本稿では紹介できなかった有効性がまだ数多く存在する。技術文書「Webシステムのボトルネックを回避するメモリ管理技術」では、Java VMのメモリ管理の詳細やさまざまなGC、日立独創のFull GCレス機能を実現する最新技術の本質や仕組み、そして測定数値による効果の違いが分かりやすく解説されているので、まずは一読をおすすめしたい。さまざまな興味深い発見が得られることと思う。
ホワイトペーパー
日立独自のメモリ管理技術で、既存の業務アプリケーションを変更なしにFull GCの発生を抑止!
「アプリケーション基盤に関する意識調査」実施中! ホワイトペーパーの表紙に掲載されているURLにアクセスして、アンケートにお答え頂いた方の中から抽選で5名様に「特製真空ステンレス携帯マグカップ」(画像左)と「書籍:Webアプリケーションサーバー設計・構築ノウハウ」(画像右)をプレゼントします。 [回答締め切り:2009年10月4日(日)] |
提供:株式会社日立製作所
企画:アイティメディア 営業企画
制作:@IT 編集部
2009年09月04日
|
|
ホワイトペーパー
メモリ管理技術
日立独自のメモリ管理技術で、既存の業務アプリケーションを変更なしにFull GCの発生を抑止!
順調に動いていたWeb システムが、ある時突然応答を返さなくなり、しばらくするとまた動き出す。そのような事象に不安を感じてはいませんか?
Java を基盤としたWeb システム環境では避けられないこの現象は、Java VM のガーベージコレクション(GC)、中でもFull GC と呼ばれるものが原因です。
近年、Web システムは大規模化・複雑化し、業務で参照・更新するデータのサイズはさらに大きくなってきています。巨大なデータには、64bit OS を適用することで対応できますが、Java VM が扱うメモリを増やすと、ガーベージコレクションはより長時間化するため、この問題はさらに深刻なものとなります。
本冊子では、まず、Java VM のメモリ管理とガーベージコレクションについて説明します。その後、日立のCosminexusが可能にした、日立独自のメモリ管理方式による「Full GC レス機能」をご紹介いたします。
関連リンク | ||||||
|
@IT関連記事 | ||||||||||||||||||
|