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 は先進的な動的トレーシング技術を採用し、以下のユニークな利点を提供します:

  1. ゼロ侵襲性:Java アプリケーションのコードや設定を変更する必要がなく、新しいプラグインやライブラリを追加する必要もありません。
  2. 特別な JVM オプションが不要:既存の OpenJDK 8/11/17 を使用でき、特別な JVM 起動オプションを追加する必要はありません。
  3. 幅広いシステム互換性:最新の Linux ディストリビューションから CentOS 7 のような古いシステムまで、多様なオペレーティングシステムをサポートしています。
  4. 極めて低いパフォーマンスオーバーヘッド:サンプリング時の Java アプリケーションへの追加負荷はほぼ無視できるレベルで、サンプリングしていない時は全く影響がありません。

これらの特徴により、OpenResty XRay は真の「プラグアンドプレイ」ソリューションとなり、いつでも、どんな環境でも Java アプリケーションを深く分析することができ、まるでソフトウェアに X 線検査を行うようなものです。

この記事では、OpenResty XRay を使用して Java アプリケーションの CPU とディスク IO のパフォーマンス問題を分析する方法をご紹介します。

Java アプリケーションにおける高 CPU 使用率の問題

Java アプリケーションの CPU 使用率が異常に高い場合、通常、特定のコードパスが過剰な計算リソースを消費していることを意味します。OpenResty XRayguided-analysis を使用することで、これらのホットスポットを迅速に特定することができます。

例えば、以下は OpenResty XRay が負荷テスト状態の Java アプリケーション(この例では Tomcat HTTP アプリケーションですが、修正されていない任意の Java アプリケーションにも同様に適用されます)らか生成した CPU フレームグラフです:

このフレームグラフでは、各バーが関数呼び出しを表し、バーの幅はその関数が占める CPU 時間の割合を示しています。バーが広いほど、その関数が消費する CPU 時間が多いことを意味します。

この図を深堀ると、Java 関数 sun.nio.ch.FileDispatcherImpl:write0 が最大の CPU 時間シェアを占めていることが明確に分かります。これは Java 仮想マシン内部で使用されるネイティブメソッドで、主にファイルやソケットにデータを書き込むために使用されます。この発見は負荷テストシナリオと高度に一致しています。なぜなら、負荷テスト中、大量の CPU リソースがレスポンスデータの返送に使用されるからです。注目すべきは、OpenResty XRay が具体的な .java ソースファイルと行番号まで正確に特定できることです。これにより、パフォーマンスホットスポットの正確な位置を直接見つけることができ、問題の特定と最適化の効率を大幅に向上させます。

OpenResty XRay が生成した Java-land CPU フレームグラフのファイル名と行番号

これらの詳細な分析結果に基づいて、これらのパフォーマンスホットスポットを的確に最適化することができます。可能な最適化戦略には、アルゴリズムの効率改善、不要な計算の削減、適切なキャッシュメカニズムの導入、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 使用率を上げられない原因となっています。

OpenResty XRay が生成した Java-land off-CPU フレームグラフ

これらの詳細情報を分析することで、CPU 利用率が低い根本原因を迅速に特定することができます。具体的な状況に応じて、ロック戦略の改善、IO 操作の最適化、非同期プログラミング技術の導入など、適切な最適化措置を講じることで、アプリケーションの全体的なパフォーマンスを向上させることができます。

Java アプリケーションにおける高ディスク IO の問題

ディスク IO が過剰に高いと、アプリケーションのパフォーマンスに著しい影響を与えるだけでなく、システム全体の動作を遅くする可能性があります。OpenResty XRay は、Java アプリケーションで高ディスク IO を引き起こすコードパスを正確に特定するための強力なツールです。

以下の図は、高ディスク IO シナリオにおける Java アプリケーションのフレームグラフを示しています:

フレームグラフの最も幅の広い部分を注意深く分析すると、SaveCache.java ファイルの 103 行目で呼び出されている書き込み関数 java.io.Writer:write がディスク IO 圧力の主な原因であることが明確に分かります。

OpenResty XRay が生成した Java-land ディスク 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 は強力な分析機能を提供するだけでなく、自動サンプリングとレポート生成機能も備えています。これにより、パフォーマンス最適化作業にさらなる利便性をもたらします:

  1. 自動オンラインオンデマンドサンプリング:XRay は事前設定された条件に基づいて自動的にサンプリングをトリガーし、人間の介入を必要としません。これは、特定の負荷やパフォーマンス指標が特定のしきい値に達したときに自動的にデータ収集を開始できることを意味し、最も重要なパフォーマンス問題を確実に捕捉します。

  2. 自動分析レポート生成:収集されたデータに基づいて、XRay は詳細な分析レポートを自動生成します。これらのレポートには、パフォーマンスホットスポット、リソース使用状況、潜在的な最適化提案などの重要な情報が含まれており、アプリケーションのパフォーマンス状況を迅速に理解することができます。

  3. 専門家チームのサポート:自動化機能に加えて、当社の専門家チームがより深いサポートを提供します:

    • お客様の具体的なニーズに応じて、特定のパフォーマンスモニタリング要件を満たすアナライザーをカスタムメイドすることができます。
    • 当社の専門家が自動生成されたレポートの解釈を支援し、専門的な洞察と最適化提案を提供します。
    • 複雑なパフォーマンス問題に遭遇した場合、当社のチームがより深い分析とソリューションを提供します。

以下は OpenResty XRay によって生成されたサンプルレポートです:

OpenResty XRay が生成した Java アプリケーションレポート

自動化ツールと専門家のサポートを組み合わせることで、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(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ております。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJITGDBSystemTapLLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

英語版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!