|
いまやJavaは、企業の基幹業務を担うエンタープライズ・システムに使われることも珍しくなくなっている。こうしたミッションクリティカルな分野では迅速な障害対応が強く求められるが、Java特有の機構がその原因解析を妨げる場合もある。こうした原因解析を強力に支援する「JRockit Flight Recorder」を紹介しよう。 |
Javaプログラムの課題 |
||
Javaの特徴として、プログラムがJava仮想マシン(JVM)上で動作することが挙げられる。JVMはガベージコレクション機能を備え、プログラムが使用するメモリを自動的に最適化する。そのため、プログラマはメモリの管理については気にすることなく、ロジックに集中できる。これはJavaを使ううえでの大きな利点だ。しかし、JVMのガベージコレクションも万能ではない。まれに、使わなくなったオブジェクトがそのまま解放されずにメモリを食いつぶしていくなどしてメモリが不足する、アウト・オブ・メモリ・エラーが発生する。
システム障害の原因を究明するとき、通常は各種のログやダンプを解析するが、メモリ上の状況は、障害によってJVMが落ちてしまったり、早期のシステム復旧を優先して再起動を行ったりすると失われてしまう。つまり、事後に何が起こっていたのかを知る術がないのだ。そこで再現環境を作って障害の再現を試みることになるが、本番環境とはハードウェアからソフトウェア、使用状況がすべて違う環境では簡単には再現しない。そのため、障害の原因追究には膨大な工数が必要となり、最悪の場合は“迷宮入り”となってしまう。
Javaプログラムでありがちな障害としてはアウト・オブ・メモリ・エラー以外にも、アプリケーションが応答しなくなる、極端に遅くなるなどもある。これらの不具合はプログラムの開発・テストのフェイズでは、Javaプロファイラを使ってメソッドの呼び出し回数や呼び出し時間、メモリ使用量、スレッドの状態などを取得して、どのロジックに時間がかかっているのか、どのスレッドがどれだけ待っているのかを知ることで発見し、解消できる。しかし、プロファイラは負荷が大きく、本番環境で使うというのは極めて特殊なケースだ。障害はいつ、どのように発生するか分からないから障害なのであって、プロファイラを掛けっぱなしにすることは現実的ではない。
だが、本番環境でもシステムに負荷を掛けることなく、プロファイラ並みの情報を取得できれば、プログラマにとっても、システム管理者にとっても大きな朗報だろう。これを可能にするのが「JRockit Flight Recorder(ジェイロキット フライトレコーダー)」だ。
高性能JVM「Oracle JRockit」とは |
||
日本オラクル株式会社 Fusion Middleware事業統括本部 ビジネス推進本部 パートナービジネス開発部 マネージャー 新井庸介氏 |
「JRockit Flight Recorder」は、オラクルが提供するJVM「Oracle JRockit」に搭載された機能である。JRockitはサーバサイド用途に最適化された高性能JVMで、WebLogic Serverの付属JVMとして長く発展してきた。
日本オラクルの新井庸介氏は、JRockitの特徴として「高速」「安定」「すべてを記録」の3つを挙げた。「Javaはもともと、Javaアプレットとして始まり、クライアントマシンを含むさまざまなプラットフォームに対応して、“マルチプラットフォーム”を実現したことが強みでした。そのような進化をたどってきたJVMに比べると、JRockitは最初からターゲットをIntelアーキテクチャに絞り、サーバサイドでの使用に特化することで、高速動作を実現しています」。
さらに新井氏は、安定について「JRockitはガベージコレクションを自動的に最適化する『動的GC』という仕組みを用意しています。JRockitは、現状でヒープの中にどれだけのオブジェクトがあって、ガベージコレクションをこれまでに何回実行していて、どのくらい時間を使っているかを自分で監視し、統計情報として蓄積していますが、動的GCはその情報を基にガベージコレクションを最適化し、安定したスループットを実現します。さらに“リアルタイム”というオプション機能を使うと、ミリ秒単位で応答速度を保証できます。これらがJRockitの安定性を支えています」と説明する。
そして、このJRockitが蓄積した統計情報を障害発生時の解析に使えるようにしたのが、今回紹介する「Flight Recorder機能」だ。Flight RecorderではJavaプロファイラと同等の情報を取得できるが、JRockitがもともと持っている機能を使っているため、JVMに与える負荷は非常に少なく、本番環境で“掛けっぱなし”にできるのだ。
障害原因を過去にさかのぼって追究する「Flight Recorder」 |
||
JRockit Flight Recorderは、メモリ使用量やスレッドの状況などに関するデータを循環バッファ(メモリ+ディスク領域)に記録していく。基本的には無限に記録を取っていくわけではなく、指定したレコーディング期間分を記録し、それを超えると上書きする追記型だ。記録はダンプファイルとして出力することもできるので、定期的にダンプを取ることで過去の情報をすべて録っておくことも不可能ではない。
ダンプファイルは手動のほか、時間指定や閾値超え、イベント発生に応じた自動出力も可能だ。「メモリ使用量が90%を超えた」「ランタイムエクセプションの、ある例外が発生した」というような、何らかの異常事態が発生したときにもダンプを残せる。これにより情報のロストを最小限に防ぐことが可能だ。
レコーディング期間は任意の長さを設定できるが、新井氏によると「24時間の設定でもおおむね問題ないと思っています。オラクル内での検証では、秒間120ページぐらいの負荷を掛けて24時間のレコーディングを行った際の記録データの容量は1.92Gbytesぐらいでした。つまり、これだけのディスク領域が確保できれば、レコーディング期間を24時間に設定してもいいわけです。そのときのCPU負荷も記録するデータ量によって大きな違いはありませんでした。従って24時間の履歴を残すようにしてもよいという感触です」という。
JRockit Flight Recorderの魅力は、「いまこの瞬間」の状態が見られるだけではなく、「これまでどうだったか?」が分かる点だ。画面1は、JRockit Mission Control(JRMC)というツールでアウト・オブ・メモリ・エラーの状況を見たものだが、こうしてみると障害が突発的に起きたものなのか、以前から起きていたことなのかは一目瞭然だ。
画面1 JRockit Mission Control(JRMC)の画面(画像をクリックすると拡大します) |
システム障害が発生したとき、ポイントとなるのが原因の解析だ。今日の複雑なシステムでは原因の切り分けや追究に時間がかかることが多く、これが「問題が起きているのに対応が遅い!」と火に油をそそぐことになる場合が少なくない。冒頭に説明したとおり、Javaではメモリ管理がブラックボックス化しており、ここで起こった障害の究明は非常に困難だった。JRockit Flight Recorderは再現環境の構築や障害の再発を待つことなく原因究明が行えるので、対症療法的対策ではない、根本的な再発防止策を迅速に行えるようになるのだ。
再発防止=品質向上、説明責任=信頼性の向上 |
||
新井氏は、JRockit Flight Recorderの価値を次のようにまとめる。
「予想外の障害が起こっても迅速に復旧でき、再発を防止できるというのはECサイトやネット証券を運営されていらっしゃるようなエンドユーザーさまにとっては、直接的に機会損失の最小化につながるでしょう。また、公共系システムなどでは顕著ですが、万が一、システムが止まってしまったときに“障害原因が分からない”となると社会的信用やブランド価値を著しく損なってしまいます。公共性の高いシステムやブランド価値に敏感な業界では、説明責任を果たす仕組みを備えておくことは重要だと考えます。
システムインテグレータさまにとっても大きなバリューがあるはずです。過去に作ったシステムの障害対応というのは、とても厄介なものだったと思います。これが迅速に対応できるようになれば障害リスクと対応コストを最小化できます。加えて、障害原因と対策が明確に説明できれば、お客さまからの信頼向上につながるはずです」(新井氏)。
Oracle JRockitはJava SE完全準拠のJVMなので、どのアプリケーションサーバを使ってもよいが、WebLogic Server(10.3.3.以降)との組み合わせではWebLogic Serverレベルのイベント――例えばサーブレットやJDBCの挙動についてもフライトレコーディングできるようになっている。
JRockit Flight Recorderは、「WebLogic Enterprise Edition」以上のエディションに含まれている。もちろん単体で購入することも可能だ。
本番システムでJVM内部の挙動を常時記録し、ダンプファイル出力をサポートするJRockit Flight Recorder――。ミッションクリティカル・システムを動かしているのならば、まずは導入の検討をしてみてはどうだろう。
関連リンク |
JRockit Flight Recorder
【6/24開催:セミナー資料】高速JVM Oracle JRockitの全貌 入門編
【7/29開催:オンラインセミナー】元SunのJavaエヴァンジェリストが語る!
Java 超入門!
関連ブログ |
なんで必要JRockit Flight Recorder?
どこまで使えるJRockit Flight Recorder?
Oracle JRockit 最新バージョン(R28.0 / JRRT 4.0 / JRMC 4.0)リリース
関連記事 |
提供:日本オラクル株式会社
アイティメディア営業企画
制作:@IT編集部
掲載内容有効期限:2010年07月25日
関連リンク |
Oracle JRockit
JRockit Flight Recorder
【6/24開催:セミナー資料】高速JVM Oracle JRockitの全貌 入門編
Java SE完全準拠の高性能JVM「Oracle JRockit」について、内部動作、チューニング手法、最新リリースでの重要な機能拡張までを説明します
【7/29開催:オンラインセミナー】元SunのJavaエヴァンジェリストが語る!Java 超入門!
アプリケーション開発言語として現在もっとも多く利用されているJavaについて、他の言語と何が違うのか、なぜJavaが選択されているのかなど、Javaについて初歩の初歩から説明します。今回は元SunのJavaエヴァンジェリストが登壇
関連ブログ |
全ての挙動は記録される。JRockit Flight Recorderの衝撃
なんで必要JRockit Flight Recorder?
どこまで使えるJRockit Flight Recorder?
Oracle JRockit 最新バージョン(R28.0 / JRRT 4.0 / JRMC 4.0)リリース
関連記事 |
障害の原因切り分けを迅速に、オラクルがJRockit最新版