企業IT最適化のゴールを目指す

“Don’t”Stop the World――Full GCへの対策Java Review(3/3 ページ)

» 2009年06月10日 08時00分 公開
[友成文隆(日立製作所),ITmedia]
前のページへ 1|2|3       

冗長システム構成と運用で対策する

 Full GCが発生して利用者への応答が一時的に停止しても問題はない、という業務システムは存在する。しかしそのような状態が許されないミッションクリティカルシステムの場合、業務システム全体で工夫することでFull GC対策を行う。

 その方式は、システムを冗長構成とした上でFull GC発生の契機となるJavaヒープのOld領域の使用率を運用ツールなどで監視する、というものだ。Old領域の使用率を監視し、ある“しきい値”を越えた契機をとらえて、負荷分散機によりリクエスト数を絞り込んだり、Javaプロセス自体を再起動したりする。システムの構成や運用方式が複雑にはなるが、ほかのノードへ業務を引き継ぐことで、Full GC発生による利用者への影響を最小限にとどめられる。要はハードウェアリソースを増やし、問題が発生する前にシステムを停止して、リフレッシュする方法である。

Full GCが発生しないWebアプリケーションサーバを利用する

 ここまでは、GCアルゴリズムの変更やシステム全体での対策を述べてきた。次にFull GCの対策として、Webアプリケーションサーバを利用することで対策できる方法を紹介する。

 繰り返しになるが、Full GCはJavaヒープのOld領域が枯渇することで発生する。Full GCの主な発生原因は、一般的なWebシステムではOld領域でのセッション情報の蓄積による。トランザクション処理のような短時間の処理とは異なり、セッション情報は複数のリクエストにまたがって保持されるため、長時間利用されるオブジェクトと認識されOld領域に移行しやすい。そしてOld領域に移動したセッション情報が主原因となり、Full GCが発生してしまう。

 日立のCosminexusではこの点に着目して、GCアルゴリズムの変更のように停止時間を短縮するのではなく、「Full GCを発生させない」機能を実現している。これが「Full GCレス機能」である。Full GCレス機能では、新しいメモリ管理方式を採用している。それはJavaヒープ領域のほかに、独自のメモリ域(明示管理ヒープ領域)を持つ方式だ。

 Full GCレス機能を使用すると、長時間利用されるオブジェクトは明示管理ヒープ領域に格納されるため、Full GCの発生を抑止できる。そのためのハードウェアや業務アプリケーションの変更を必要としないのがポイントである(図2)。

図2 図2

 またFull GCレス機能の「良い点」として、マシン台数を最適化できることが挙げられる。Full GC発生による利用者への影響を最小限にとどめるために、わざわざシステムを冗長構成にする必要はない。最適化したシステム構成で、利用者に影響を与えず「Don't」 Stop the Worldを実現できる。

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ