Go アプリケーションの追跡時における OpenResty XRay のシステムパフォーマンスへの影響
本番環境で稼働中の Go アプリケーションを分析する際、最大の懸念は問題を特定できるかどうかではなく、分析ツール自体が本番サービスの足を引っ張らないかという点です。本番モードで稼働中の gin(Go)アプリケーションで OpenResty XRay のオーバーヘッドを実測したところ、サンプリング中の最大スループットの低下はわずか 1.5%、平均レイテンシの増加はわずか 6 マイクロ秒であり、Agent がアイドル状態のときのオーバーヘッドは完全にゼロでした。 これが可能なのは、従来の常駐型 APM Agent とは異なり、ターゲットプロセスへのコードインジェクションや変更を一切行わず、ユーザーが分析を明示的に開始したときにのみ低頻度でデータを収集するためです。以下では、項目ごとの実測データをもとに、CPU・メモリ・ロードアベレージ、およびスループットとレイテンシへの実際の影響を示します。詳しい手順は、本記事冒頭の動画版をご覧ください。
テスト環境とパフォーマンスベースライン
比較基準を確立するため、プロファイラーの実行前に top コマンドでシステムのパフォーマンスベースラインを取得しました。以下のスクリーンショットに示すように、対象の gin-helloworld プロセス(Go 製アプリケーション)の CPU 使用率は約 43%、システム全体の直近 1 分間のロードアベレージは 0.62、CPU アイドル率は約 84%、空きメモリは約 1546 MB でした。
分析中、CPU・メモリ・ロードアベレージにどのような影響があるか?
実際の診断シナリオを再現するため、OpenResty XRay コンソールから本番モードで対象の Go プロセスに対し、300 秒(5 分間)の “High CPU usage” シナリオ分析を実施しました(操作パス:Guided Analysis → High CPU usage → 対象プロセスを選択)。
「本番モード」の選択は非常に重要です。このモードは本番環境向けに設計されており、低頻度サンプリングなどの最適化を通じてパフォーマンスへのオーバーヘッドを最小限に抑えることを目的としています。ただし、その分、分析に要する時間が長くなる場合があります。
プロファイラーの実行期間中、システムの各指標にわずかな変化が確認されました:
- 対象プロセスの CPU 使用率:~47% に上昇し、ベースライン比で約 4 パーセントポイント増加しました。
- システム全体の直近 1 分間のロードアベレージ:0.63 に上昇しましたが、ベースラインの 0.62 からほとんど変化がありませんでした。
- CPU アイドル率:~85% を維持し、ベースラインの 84% とほぼ同水準でした。
- 空きメモリ:~1622 MB に上昇し、ベースライン比で 76 MB 増加しました。
以上の結果から、OpenResty XRay プロファイラーはサンプリング期間中にシステムレベルのリソース(CPU・メモリ・ロードアベレージ)への影響は認められるものの、その影響は軽微であり、システムの安定性に支障をきたすものではありませんでした。
分析はスループットとレイテンシにどの程度影響するか?
オンラインサービスにとって、スループットとレイテンシはパフォーマンスを測る上で最も重要な指標です。この2つの主要指標について、3回の比較テストを実施しました。以下の表は、三つの状態における結果をまとめたものです。
| シナリオ | 最大スループット | 平均レイテンシ |
|---|---|---|
| OpenResty XRay Agent 未インストール | 約 24,500 RPS | 406 マイクロ秒 |
| Agent 導入済み・プロファイラーはアイドル | 約 24,500 RPS(変化なし) | 406 マイクロ秒(変化なし) |
| プロファイラーがサンプリング中 | 約 24,100 RPS(−1.5%) | 412 マイクロ秒(+6 マイクロ秒) |
1. 最大スループット
負荷テストツールを使用して、各状態におけるサーバーの最大スループットを計測しました。
- OpenResty XRay の Agent がインストールされていない場合、最大スループットは約 24,500 RPS です。
- Agent がインストールされているがプロファイラーが実行されていない場合、最大スループットに変化はありません。
- プロファイラーがサンプリング中の場合、最大スループットは約 24,100 RPS となり、サンプリングなしの場合と比べてわずか 1.5% の低下にとどまります。
この結果から、プロファイラーの実行が対象プロセスの最大スループットに与える影響は極めて小さいことが確認されました。
2. 平均リクエストレイテンシ
サンプリング中におけるリクエストレイテンシへの影響を計測しました。
- OpenResty XRay の Agent がインストールされていない場合、平均リクエストレイテンシは 406 マイクロ秒です。
- Agent がインストールされているがプロファイラーが実行されていない場合、平均リクエストレイテンシに変化はありません。
- プロファイラーが実行中の場合、リクエストレイテンシは 412 マイクロ秒となり、増加はわずか 6 マイクロ秒にとどまります。
この結果は、プロファイラーの実行が対象プロセスのリクエストレイテンシに与える影響も極めて小さいことを示しています。
なお、“Insights” および “Dashboard” ページでの自動分析実行時のパフォーマンスオーバーヘッドについても、上記のテスト結果と同様に極めて低い水準にあります。
Go アプリケーションで実際に高い CPU 使用率の問題を調査している場合は、正規表現のコンパイルが CPU 時間の 36.8% を消費していた事例をご覧ください:Go アプリケーションの高 CPU 使用率分析。同じ本番モードでのオーバーヘッド実測は他の言語でも行っています。Rust、PHP、Python、Perl アプリケーションの結果もご覧ください。
OpenResty XRay と常駐型 APM Agent の比較
オーバーヘッドをこれほど低く抑えられる理由は、アーキテクチャの違いにあります。従来の APM Agent はターゲットプロセスにコードをインジェクションし、継続的にデータを収集するため、誰も監視していないときでも常にランタイムオーバーヘッドが発生します。OpenResty XRay はその逆のアプローチを取り、非侵入型でオンデマンドのサンプリングのみを行います。
| 従来の常駐型 APM Agent | OpenResty XRay | |
|---|---|---|
| データ収集 | 継続的・常時稼働 | オンデマンド、ユーザーが分析を開始したときのみ |
| ターゲットプロセス | コードインジェクション / 計装 | 非侵入型、コードを変更しない |
| アイドル時のオーバーヘッド | 常時発生 | 完全にゼロ |
| サンプリング時のオーバーヘッド | 常時発生 | スループット約 1.5%、レイテンシ +6 マイクロ秒 |
よくある質問
OpenResty XRay は本番環境の Go アプリケーションにどの程度のパフォーマンスオーバーヘッドをもたらしますか?
分析の実行中、OpenResty XRay は最大スループットを約 1.5%(毎秒約 24,500 リクエストから約 24,100 リクエストへ)低下させ、平均レイテンシを約 6 マイクロ秒(406 マイクロ秒から 412 マイクロ秒へ)増加させます。Agent が導入済みでもサンプリングを行っていない場合はスループットとレイテンシに変化はなく、アイドル状態ではオーバーヘッドは完全にゼロです。
本番環境の gin アプリケーションで OpenResty XRay を実行しても安全ですか?
はい。OpenResty XRay の Agent は非侵入型で、ターゲットプロセスへのコードインジェクションや変更を一切行わず、ユーザーが明示的に分析を開始したときにのみ低頻度でデータを収集します。稼働中の gin-helloworld プロセスに対する 300 秒間の本番モード分析では、直近 1 分間のロードアベレージは 0.62 から 0.63 に上昇しただけ、ターゲットプロセスの CPU 使用率も 43% から約 47% に上昇しただけであり、本番環境で継続的に導入できます。
分析を実行していないとき、OpenResty XRay は Go アプリケーションの速度を低下させますか?
いいえ。Agent はユーザーが開始した分析の実行中にのみデータを収集します。導入済みでもアイドル状態のときは、最大スループットとリクエストレイテンシは Agent がまったくない場合と同一であり、パフォーマンスオーバーヘッドは完全にゼロです。
OpenResty XRay のオーバーヘッドは、従来の常駐型 APM Agent と比べてどうですか?
従来の APM Agent はターゲットプロセスにコードをインジェクションして継続的に稼働するため、常にオーバーヘッドが発生します。一方 OpenResty XRay はオンデマンドで低頻度のサンプリングを行うため、アイドル時のオーバーヘッドはゼロで、サンプリング中でもスループットへの影響は約 1.5% にとどまります。
OpenResty XRay は Go プロセスの分析中にどれだけの CPU とメモリを使用しますか?
gin-helloworld プロセスのサンプリング中、ターゲットプロセスの CPU 使用率はベースラインの 43% から約 47%(約 4 パーセントポイント)に上昇し、CPU アイドル率は約 85%(ベースライン 84%)を維持し、空きメモリは約 1622 MB で、ベースラインの 1546 MB からの変化はわずかでした。
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 Edge(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ております。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJIT、GDB、SystemTap、LLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。
翻訳
英文版原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!


























