オンライン Java アプリケーションの CPU、off-CPU、およびディスク IO 使用状況の分析(OpenResty XRay を使用)
OpenResty XRay は 動的トレーシング 製品であり、アプリケーションを変更することなくオンラインアプリケーションを分析することができます。その使用は非常に効率的かつ安全です。実行中のプロセスをいつでも深く理解することができ、まるでソフトウェアに X 線検査を行うようなものです。
従来の分析ツールとは異なり、OpenResty XRay は JVM の safepoint メカニズムに依存しません。これは、Java アプリケーションのパフォーマンスに影響を与えることなく分析を行えることを意味します。この独自のアプローチにより、XRay はより正確で包括的なパフォーマンスデータを提供しつつ、分析対象のアプリケーションへの干渉を最小限に抑えることができます。
OpenResty XRay のコア技術は、eBPF+ や Stap+ など、当社が独自に改良した動的トレーシング技術に基づいています。これらの先進技術により、XRay はシステムオーバーヘッドを極めて低く抑えながら、より深い、より精密な分析能力を提供することができます。特筆すべきは、OpenResty XRay が RHEL/CentOS Linux 7 の 3.10 旧カーネルと 6.x 新カーネルの両方をサポートしており、ユーザーに幅広いシステム互換性を提供していることです。
OpenResty XRay がサポートするアプリケーションの一つが Java です。従来の JVM エージェント方式とは異なり、OpenResty XRay は先進的な動的トレーシング技術を採用し、以下のユニークな利点を提供します:
- ゼロ侵襲性:Java アプリケーションのコードや設定を変更する必要がなく、新しいプラグインやライブラリを追加する必要もありません。
- 特別な JVM オプションが不要:既存の OpenJDK 8/11/17 を使用でき、特別な JVM 起動オプションを追加する必要はありません。
- 幅広いシステム互換性:最新の Linux ディストリビューションから CentOS 7 のような古いシステムまで、多様なオペレーティングシステムをサポートしています。
- 極めて低いパフォーマンスオーバーヘッド:サンプリング時の Java アプリケーションへの追加負荷はほぼ無視できるレベルで、サンプリングしていない時は全く影響がありません。
これらの特徴により、OpenResty XRay は真の「プラグアンドプレイ」ソリューションとなり、いつでも、どんな環境でも Java アプリケーションを深く分析することができ、まるでソフトウェアに X 線検査を行うようなものです。
この記事では、OpenResty XRay を使用して Java アプリケーションの CPU とディスク IO のパフォーマンス問題を分析する方法をご紹介します。
Java アプリケーションにおける高 CPU 使用率の問題
Java アプリケーションの CPU 使用率が異常に高い場合、通常、特定のコードパスが過剰な計算リソースを消費していることを意味します。OpenResty XRay の guided-analysis を使用することで、これらのホットスポットを迅速に特定することができます。
例えば、以下は OpenResty XRay が負荷テスト状態の Java アプリケーション(この例では Tomcat HTTP アプリケーションですが、修正されていない任意の Java アプリケーションにも同様に適用されます)らか生成した CPU フレームグラフです:
このフレームグラフでは、各バーが関数呼び出しを表し、バーの幅はその関数が占める CPU 時間の割合を示しています。バーが広いほど、その関数が消費する CPU 時間が多いことを意味します。
この図を深堀ると、Java 関数 sun.nio.ch.FileDispatcherImpl:write0
が最大の CPU 時間シェアを占めていることが明確に分かります。これは Java 仮想マシン内部で使用されるネイティブメソッドで、主にファイルやソケットにデータを書き込むために使用されます。この発見は負荷テストシナリオと高度に一致しています。なぜなら、負荷テスト中、大量の CPU リソースがレスポンスデータの返送に使用されるからです。注目すべきは、OpenResty XRay が具体的な .java ソースファイルと行番号まで正確に特定できることです。これにより、パフォーマンスホットスポットの正確な位置を直接見つけることができ、問題の特定と最適化の効率を大幅に向上させます。
これらの詳細な分析結果に基づいて、これらのパフォーマンスホットスポットを的確に最適化することができます。可能な最適化戦略には、アルゴリズムの効率改善、不要な計算の削減、適切なキャッシュメカニズムの導入、I/O 操作の最適化などが含まれますが、これらに限定されません。これらの的を絞った最適化を通じて、アプリケーションの CPU 使用率を効果的に低減し、全体的なパフォーマンスを向上させることができます。
Java アプリケーションにおける CPU ブロッキングの問題
時として、Java アプリケーションの CPU 使用率が上がらないことも問題となる場合があります。これは通常、IO ブロッキング、ロック待ち、またはその他のリソース競合によって引き起こされます。OpenResty XRay はこれらのボトルネックを見つけるのに役立ちます。
例えば、以下は OpenResty XRay が低 CPU 使用率の Java アプリケーションのために生成した off-CPU フレームグラフです:
このフレームグラフでは、各バーが関数呼び出しを表し、バーの幅はその関数が CPU をブロックしている時間を示しています。バーが広いほど、その関数が CPU をブロックしている時間が長いことを意味します。
フレームグラフの最も幅の広い部分を注意深く観察すると、BankSystem.java
の 76 行目で java.util.concurrent.locks.ReentrantLock:lock
関数を呼び出してロックを取得していることがわかります。ここの幅広い長方形は、複数のスレッドがこのロックを待っていることを示しており、これが CPU 使用率を上げられない原因となっています。
これらの詳細情報を分析することで、CPU 利用率が低い根本原因を迅速に特定することができます。具体的な状況に応じて、ロック戦略の改善、IO 操作の最適化、非同期プログラミング技術の導入など、適切な最適化措置を講じることで、アプリケーションの全体的なパフォーマンスを向上させることができます。
Java アプリケーションにおける高ディスク IO の問題
ディスク IO が過剰に高いと、アプリケーションのパフォーマンスに著しい影響を与えるだけでなく、システム全体の動作を遅くする可能性があります。OpenResty XRay は、Java アプリケーションで高ディスク IO を引き起こすコードパスを正確に特定するための強力なツールです。
以下の図は、高ディスク IO シナリオにおける Java アプリケーションのフレームグラフを示しています:
フレームグラフの最も幅の広い部分を注意深く分析すると、SaveCache.java
ファイルの 103 行目で呼び出されている書き込み関数 java.io.Writer:write
がディスク IO 圧力の主な原因であることが明確に分かります。
これらの正確な情報に基づいて、ディスク IO のコードを的確に最適化することができます。例えば、バッファリング技術の使用、非同期 IO 操作の実装、バッチ処理の採用などの戦略を検討し、ディスク IO 圧力を効果的に低減し、システム全体のパフォーマンスを向上させることができます。
OpenResty XRay の深い分析を通じて、パフォーマンスのボトルネックをより効率的に特定し解決することができ、Java アプリケーションがあらゆる負荷条件下で卓越したパフォーマンスを維持できるようになります。
サポートされている Java バージョンとオペレーティングシステム
OpenResty XRay は主要な OpenJDK Java バージョンをサポートしています。これには以下が含まれます:
- Java 8
- Java 11
- Java 17
同時に、OpenResty XRay は最新のディストリビューションから CentOS 7 のような古いシステムまで、多様な Linux オペレーティングシステムをサポートしており、最大限の柔軟性と互換性を提供します。
自動サンプリングと専門家による分析
OpenResty XRay は強力な分析機能を提供するだけでなく、自動サンプリングとレポート生成機能も備えています。これにより、パフォーマンス最適化作業にさらなる利便性をもたらします:
-
自動オンラインオンデマンドサンプリング:XRay は事前設定された条件に基づいて自動的にサンプリングをトリガーし、人間の介入を必要としません。これは、特定の負荷やパフォーマンス指標が特定のしきい値に達したときに自動的にデータ収集を開始できることを意味し、最も重要なパフォーマンス問題を確実に捕捉します。
-
自動分析レポート生成:収集されたデータに基づいて、XRay は詳細な分析レポートを自動生成します。これらのレポートには、パフォーマンスホットスポット、リソース使用状況、潜在的な最適化提案などの重要な情報が含まれており、アプリケーションのパフォーマンス状況を迅速に理解することができます。
-
専門家チームのサポート:自動化機能に加えて、当社の専門家チームがより深いサポートを提供します:
- お客様の具体的なニーズに応じて、特定のパフォーマンスモニタリング要件を満たすアナライザーをカスタムメイドすることができます。
- 当社の専門家が自動生成されたレポートの解釈を支援し、専門的な洞察と最適化提案を提供します。
- 複雑なパフォーマンス問題に遭遇した場合、当社のチームがより深い分析とソリューションを提供します。
以下は OpenResty XRay によって生成されたサンプルレポートです:
自動化ツールと専門家のサポートを組み合わせることで、OpenResty XRay は Java アプリケーションが常に最適なパフォーマンスを維持できる包括的な最適化ソリューションを提供します。
パフォーマンスへの影響とオーバーヘッド
OpenResty XRay の設計理念は非侵襲的で軽量です。サンプリング時に Java アプリケーションプロセスへのオーバーヘッドは通常非常に小さく、無視できるレベルです。サンプリングしていない時は、プロセスの実行速度に全く影響を与えません。
この低オーバーヘッドの特性により、OpenResty XRay は理想的な本番環境モニタリングツールとなり、アプリケーションに大きな影響を与えることなく、いつでもどこでもパフォーマンス分析を行うことができます。
今後の計画
私たちはここで立ち止まることはありません。将来的には、OpenResty XRay をさらに強力で有用なものにするための計画がさらにあります。現在開発中の機能の一部には以下が含まれます:
- Java アプリケーションのネットワークリクエストのレイテンシー統計を取り、問題のあるリクエストのデータパケットをインテリジェントにキャプチャします。
- 他の技術スタックとオープンソースソフトウェアをサポートすることです。私たちは OpenResty XRay を、基盤となる技術に関係なく、あらゆるオンラインアプリケーションを分析できる汎用ツールにしたいと考えています。検討中の対象には、Nginx モジュール、Envoy 拡張機能、PostgreSQL 拡張機能、Perl/Python/Ruby モジュールやライブラリなどが含まれますが、これらに限定されません。
ご提案や追加の指標または機能に対するニーズがありましたら、ぜひお聞かせください。当社は常にお客様のフィードバックに耳を傾け、お客様のニーズを満たすために製品を継続的に改善しています。
結論
本記事では、OpenResty XRay を使用して Java アプリケーションの CPU とディスク IO の使用状況を分析する方法をご紹介しました。また、いくつかの結果例を示し、その意味を説明しました。
OpenResty XRay を使用することで、CPU とディスクリソースを消費するコードパスを簡単に見つけ出し、それらが全体的なパフォーマンスにどの程度影響を与えているかを把握することができます。そして、これらの情報を使用して Java アプリケーションを最適化し、より高速かつスムーズに動作させることができます。
OpenResty XRay 製品とそれがオンラインアプリケーションの他の側面をどのように扱うことができるかについて、さらに詳しく知りたい場合は、当社のウェブサイト をご覧いただくか、お問い合わせ ください。
OpenResty XRay について
OpenResty XRay は動的トレーシング製品であり、実行中のアプリケーションを自動的に分析して、パフォーマンスの問題、動作の問題、セキュリティの脆弱性を解決し、実行可能な提案を提供いたします。基盤となる実装において、OpenResty XRay は弊社の Y 言語によって駆動され、Stap+、eBPF+、GDB、ODB など、様々な環境下で複数の異なるランタイムをサポートしております。
著者について
章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。
章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay動的トレーシング技術を利用した非侵襲的な障害分析および排除ツール)と OpenResty XRay(マイクロサービスおよび分散トラフィックに最適化された多機能
翻訳
英語版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!