【前編】外部ライブラリに起因する問題も確実に追跡

「Oracle WebLogic Server Enterprise Edition」に備わるシステム監視機能「JRockit Mission Control」を使えば、OSからWebアプリケーションのレイヤまで、システムの稼働状況を常時確認することができる。稼働中のシステムにほとんど負荷をかけることなく利用できる同機能は、システムに何か問題が生じた際、その原因究明に使うことで大きな威力を発揮する。実際にオラクル社内でも、原因不明のトラブルに見舞われたユーザーの支援にあたる際、JRockit Mission Controlを活用して迅速な問題解決に努めている。本企画では、数々のトラブル解決にあたってきたApplication Gridソリューション部 シニアセールスコンサルタントの二川 秀智氏(日本オラクル Fusion Middleware事業統括本部 ソリューション本部)に聞いた、実際のトラブル事例に基づくJRockit Mission Controlの活用例を紹介する(編集部)。

さまざまなシステム・レイヤの挙動を詳細に確認できるJRockit Mission Control

日本オラクル Fusion Middleware事業統括本部 ソリューション本部 Application Gridソリューション部 シニアセールスコンサルタントの二川秀智氏 以前に本コラムで紹介したWebLogic Server Enterprise Editionの稼働情報記録機能「JRockit Flight Recorder」を使うと、稼働中のシステムへの負荷を最小限に抑えながら、OSからJVM、Javaアプリケーション、そしてWebLogic Serverの稼働情報を詳細に記録することができる。

 WebLogic Server Enterprise Editionには、従来よりJRockit Mission Control(JRMC)が同梱されている。JRMCはWebLogic Serverの稼働状況をリアルタイムに解析し、レスポンスの低下やOutOfMemoryエラー、あるいはハードウェアの性能に見合うスループットが得られないといった事象の原因を解析するための機能を備えたGUIツールだが、実はJRockit Flight RecorderはこのJRMCの1機能として提供されている。Flight Recorderの開始/停止や、記録した稼働情報の確認/分析は、JRMCからGUIベースで簡単に実施することができる。

 ただし残念ながら、WebLogic Serverユーザーのうち、JRockit Mission ControlやJRockit Flight Recorderを十分に活用できている方の割合はまだまだ少ないようだ。しかし、今や「何か異常を感じたら、とりあえずJRockit Mission Controlでシステムの挙動を眺めてみる」――これが現在のWebLogic Serverでは最もスマートなトラブル対処術である。何か問題が起きた際、あるいはシステムに異変を感じた際、まずはJRockit Mission Controlでシステムの稼働状況を確認することで、複雑なトラブルでも迅速に問題の切り分けが出来る。本コラムでは、実際にこのアプローチを実践してユーザー企業のシステムで起きた数々の異変を解決してきた二川氏から聞いた、WebLogic ServerとJRockit Mission Controlならではのスマートなトラブル解決例を紹介していこう。

関連記事:
本番環境で使える! システム障害への対応を迅速化する「JRockit Flight Recorder」の威力

外部ライブラリに起因する性能問題の原因を究明

 まず紹介したいのは金融業のA社が見舞われたトラブルである。同社では、顧客向けに大規模なオンライン・サービスを提供しており、そのアプリケーション実行基盤としてOracle WebLogic Serverを利用している。このサービスでは高速なレスポンスが求められることから、インメモリ・グリッド製品「Oracle Coherence」も利用していた。

 このシステムで生じた異変は、高い負荷がかかった際、サービスのレスポンスタイムが極端に低下するというものである。こうした高負荷時のレスポンス低下でまず疑われるのは、CPUをはじめとするハードウェア・リソースの不足である。だが、システムのCPUやメモリには十分な余裕があり、ハードウェアに原因があるとは考えられなかった。

 そこで、このシステムを担当するエンジニアは、WebLogic ServerやOracle Coherenceの各種スレッドのチューニングやJVMのヒープ・サイズの調整を試みたが、問題は一向に解消しなかった。ここで二川氏の下に相談が寄せられた。

 このトラブルの解決にあたり二川氏がまず行ったのは、JRockit Flight Recorderを用いて稼動中のシステムの動作情報を記録することだった。そして、その記録をJRockit Mission Controlで読み込んで解析を開始した。

 まずわかったのは、Oracle Coherenceに書き込みをしている側のスレッドで「Java Sleep」が多発しているという事実である。

JRockit Flight Recorder イベントグラフで概観把握

 JRockit Mission Controlを使うことで、Java Sleepなどのイベントの発生状況を時間軸に沿って調べられるほか、そのイベントを発生させているメソッドも特定できる。そこでJRockit Mission Controlの画面をドリルダウンしながらJava Sleepの発生源を追いかけたところ、突き当たったのはOracle Coherenceのあるメソッドだった。

イベントログで遅延発生元のメソッドを特定

 このメソッドはCoherenceの処理フロー制御機構と関連している。Coherenceはこのケースのように処理能力を超える頻度のデータ書き込みが発生した場合、Java Sleepを呼びだして書き込み処理を断続的に中断する。

 この内容を基にさらに解析を進めたところ、今回のアプリケーションの中で使用しているある処理がCoherence上では1スレッドのみで実行されており、これが原因でCoherence内にデータが滞留し、書き込み処理の遅延が発生していることが判明した。

 こうして原因を特定できたことから、その処理を行うOracle Coherence上の実装を、求められる性能に見合うよう多重化することで問題を解決できた。わかってみれば些細な設計の問題なのだが、もしJRockit Flight RecorderやJRockit Mission Controlがなかったとしたら、原因を速やかに特定するのは難しかっただろう。特に今回のようにユーザー側が開発したJavaアプリケーションではなく、その中で利用しているライブラリやミドルウェアまで調査しないと原因が判明しないケースの場合、問題個所を特定するのは極めて困難だ。

 しかし、JRockit Mission Controlを使えば、外部ライブラリのAPI内部までトレースして問題を解析することができる。読者の周囲でも、自分たちが開発したアプリケーションではなく、外部のライブラリにトラブルの原因があったというケースは少なくないだろう。だが、オープンソースか商用かにかかわらず、外部ライブラリの中身まで調べて原因を特定するのは非常に難しく、時間もかかる作業だ。JRockit Flight RecorderとJRockit Mission Controlを活用することで、作業に手間をかけずに問題個所を特定することができる。WebLogic Serverではまずはこうした優れたツールを使うことがトラブル対応の定石なのである。

 後編では引き続き、JRockit Flight RecorderやJRockit Mission Controlを使ったトラブル解決例をさらに2つ紹介してみたい。

後編に続く


【Pick-Upテクノロジー】高信頼性JVM「JRockit」パフォーマンス・チューニング
「Oracle JRockit パフォーマンス・チューニング・ガイド」では、このJVMの実装において最大限の機能を引き出すために使用できる、チューニングの手法やオプションについて説明しています。
続きを読む

【Pick-Upテクノロジー】Oracle JRockitフライト・レコーダ
動作中のJavaプログラムでは、実際にどのような処理が実行されているのでしょうか。
- 時間の流れを遡って、問題が発生する直前に何が起きたかを分析したいと思いませんか?
- パフォーマンスに影響を与えることなく、非常に詳細なプロファイリングを実行したいと思いませんか?
JRockitフライト・レコーダは、これらのすべての目標を満たすように設計されています。
続きを読む

この記事は参考になりましたか?

コメントがありましたらお送りください。

送信
まずJRockit Mission Control! 迷宮入りのWebLogicトラブルをスマートに解決
お問い合わせ Oracle Direct

Oracle Direct

0120-155-096 月~金 9:00~12:00/13:00~18:00(祝日及び年末年始休業日を除きます)

お問い合わせフォーム

お問い合わせフォーム

こんな時にはOracle Directへ 製品・導入に関するご相談 導入前の技術的なご質問 ハードウエア構成のお見積り 移行支援サービス パフォーマンス診断サービス バージョンアップ無償支援

詳細はこちら

製品の購入・導入に関するご相談はこちら

Oracle Direct

0120-155-096

お問い合わせフォーム

こんな時にはOracle Directへ

製品・導入に関するご相談 導入前の技術的なご質問 ハードウエア構成のお見積り 移行支援サービス パフォーマンス診断サービス バージョンアップ無償支援

詳細はこちら