オンライン Node.js アプリケーションの CPU 使用状況分析(OpenResty XRay を使用)
OpenResty XRay は動的トレーシング製品であり、アプリケーションを修正することなくオンラインアプリケーションを分析することができます。非常に効率的かつ安全に使用できます。ソフトウェアにX線検査を行うように、いつでも実行中のプロセスを深く理解することができます。
OpenResty XRay のコア技術は、eBPF+ や Stap+ などの当社独自に改良した動的トレーシング技術に基づいています。これらの先進技術により、XRay はシステムオーバーヘッドを極めて低く抑えながら、より深く、より正確な分析能力を提供することができます。特筆すべきは、OpenResty XRay が RHEL/CentOS Linux 7 の 3.10 旧カーネルと 6.x 新カーネルの両方をサポートしており、ユーザーに幅広いシステム互換性を提供していることです。
OpenResty XRay がサポートするアプリケーションの一つが Node.js です。OpenResty XRay は先進的な動的トレーシング技術を採用し、以下のユニークな利点を提供します:
- 非侵入性:Node.js アプリケーションコードや設定を変更する必要がなく、新しいプラグインやライブラリを追加する必要もありません。
- 特別な起動オプション不要:既存の Node.js ソフトウェアをそのまま使用でき、特別な起動オプションを追加する必要はありません。
- 幅広いシステム互換性:最新の Linux ディストリビューションから CentOS 7 のような古いシステムまで、多様なオペレーティングシステムをサポートしています。
- 極めて低いパフォーマンス損失:サンプリング時の Node.js アプリケーションへの追加負荷はほぼ無視できるレベルであり、サンプリングしていない時は完全に影響がありません。
これらの特性により、OpenResty XRay は真の「プラグアンドプレイ」ソリューションとなり、いつでも、どんな環境でも、ソフトウェアにX線検査を行うように Node.js アプリケーションを深く分析することができます。
この記事では、OpenResty XRay を使用して Node.js アプリケーションの CPU パフォーマンス問題を分析する方法をご紹介します。
Node.js アプリケーションにおける高 CPU 使用率の問題
Node.js アプリケーションの CPU 使用率が異常に高い場合、通常は特定のコードパスが過剰な計算リソースを消費していることを意味します。OpenResty XRay のガイド付き分析を活用することで、これらのホットスポットコードを迅速に特定することができます。
例えば、以下は OpenResty XRay が負荷テスト状態の Node.js アプリケーション(この例では Express.js アプリケーションですが、修正されていない任意の Node.js アプリケーションにも同様に適用されます)に対して生成した CPU フレームグラフです:
このフレームグラフでは、各バーが関数呼び出しを表し、バーの幅はその関数が占める CPU 時間の割合を示しています。バーが広いほど、その関数が消費する CPU 時間が多いことを意味します。
この図を詳細に分析すると、express/lib/response.js:250
の send
関数が最大の CPU 時間シェアを占めていることが明確に分かります。これは Node.js 仮想マシン内部で使用されるネイティブメソッドで、主にデータをファイルやネットワークソケットに書き込むために使用されます。この発見は負荷テストシナリオと高度に一致しています。なぜなら、負荷テスト中に大量の CPU リソースがレスポンスデータの返送に使用されているからです。注目すべき点は、OpenResty XRay が具体的な Node.js ソースファイルと行番号レベルまで正確に特定できることです。これにより、パフォーマンスのホットスポットの正確な位置を直接見つけることができ、問題の特定と最適化の効率が大幅に向上します。
これらの詳細な分析結果に基づいて、パフォーマンスのホットスポットを的確に最適化することができます。考えられる最適化戦略には、アルゴリズム効率の改善、不要な計算の削減、適切なキャッシュメカニズムの導入、I/O 操作の最適化などがあります。これらの的を絞った最適化により、アプリケーションの CPU 使用率を効果的に削減し、全体的なパフォーマンスを向上させることができます。
Node.js アプリケーションにおける CPU ブロッキングの問題
Node.js アプリケーションの CPU 使用率が上がらないことも問題となる場合があります。これは通常、IO ブロッキングや他のリソース競合によって引き起こされます。OpenResty XRay はこれらのボトルネックを特定するのに役立ちます。
例えば、以下は OpenResty XRay が低 CPU 使用率の Node.js アプリケーション向けに生成した off-CPU フレームグラフです:
このフレームグラフでは、各バーが関数呼び出しを表し、バーの幅はその関数が CPU をブロックしている時間を示しています。バーが広いほど、その関数が CPU をブロックしている時間が長いことを意味します。
フレームグラフの最も幅広い部分を注意深く観察すると、問題が app.js:10
の readFileSync
関数呼び出しにあることがわかります。この同期ファイル読み取り操作が CPU をブロックし、アプリケーション全体のパフォーマンス低下を引き起こしています。
これらの詳細情報を分析することで、CPU 利用率が低い根本原因を迅速に特定することができます。具体的な状況に応じて、IO 操作の最適化や非同期プログラミング技術の導入など、適切な最適化措置を講じることで、アプリケーションのパフォーマンスを全体的に向上させることができます。
サポートされている Node.js バージョンとオペレーティングシステム
OpenResty XRay は現在 Node.js 22 をサポートしており、今後さらに多くのバージョンのサポートが追加される予定です。
また、OpenResty XRay は最新のディストリビューションから CentOS 7 のような古いシステムまで、様々な Linux オペレーティングシステムをサポートしており、最大限の柔軟性と互換性を提供します。
自動サンプリングと専門家による分析
OpenResty XRay は強力な分析機能を提供するだけでなく、自動サンプリングとレポート生成機能も備えています。パフォーマンス最適化作業に以下のような利便性をもたらします:
自動オンデマンドサンプリング:XRay は事前設定された条件に基づいて自動的にサンプリングをトリガーすることができ、手動介入は必要ありません。これにより、特定の負荷やパフォーマンス指標が一定のしきい値に達した時に自動的にデータ収集を開始し、最も重要なパフォーマンス問題を確実に捉えることができます。
AI インテリジェント分析:当社の AI システムは生成されたフレームグラフを自動的に分析し、パフォーマンスのボトルネックや異常パターンをインテリジェントに識別します。システムは分析結果に基づいて、関連するフレームグラフツールを自動的に必要に応じて実行し、最も関連性の高いパフォーマンスデータを確実に捕捉します。
自動分析レポート生成:収集されたデータと AI 分析結果に基づいて、XRay は詳細な分析レポートを自動生成することができます。これらのレポートにはパフォーマンスホットスポット、リソース使用状況、潜在的な最適化提案などの重要な情報が含まれており、アプリケーションのパフォーマンス状況を迅速に把握することができます。
専門家チームによるサポート:自動化機能に加えて、当社の専門家チームがより深いサポートを提供する準備ができています:
- お客様の具体的なニーズに基づいて、特定のパフォーマンスモニタリング要件を満たす新しいアナライザーをカスタマイズすることができます。
- 当社の専門家は自動生成されたレポートの解釈をサポートし、専門的な洞察と最適化提案を提供します。
- 複雑なパフォーマンス問題に直面した場合、当社のチームはより深い分析と解決策を提供することができます。
これは OpenResty XRay によって生成されたサンプルレポートです:
自動化ツールと専門家サポートを組み合わせることで、OpenResty XRay はお客様の Node.js アプリケーションが常に最適なパフォーマンス状態を維持できるよう、包括的なパフォーマンス最適化ソリューションを提供します。
パフォーマンスへの影響と追加負荷
OpenResty XRay は非侵入的かつ軽量であることを設計理念としています。サンプリング時に Node.js アプリケーションプロセスに追加される負荷は通常非常に小さく、無視できるレベルです。サンプリングを行っていない時は、プロセスの実行速度はまったく影響を受けません。
この低オーバーヘッドの特性により、OpenResty XRay は本番環境監視のための理想的なツールとなり、アプリケーションに顕著な影響を与えることなく、いつでもどこでもパフォーマンス分析を実施することが可能です。
今後の計画
私たちはここで立ち止まるつもりはありません。将来的には、OpenResty XRay をさらに強力で有用なものにするための計画がたくさんあります。現在開発中の機能には以下のようなものがあります:
- Node.js アプリケーションのネットワークリクエストのレイテンシー統計を取り、問題のあるリクエストのパケットデータをインテリジェントに収集します。
- 他の技術スタックやオープンソースソフトウェアのサポート。OpenResty XRay を、基盤となる技術に関係なく、あらゆるオンラインアプリケーションを分析できる汎用ツールにしたいと考えています。検討中の対象には、Nginx モジュール、Envoy 拡張機能、PostgreSQL 拡張機能、Perl/Python/Ruby モジュールやライブラリなどがあります。
ご提案や追加のメトリクスや機能に関するご要望がありましたら、ぜひお聞かせください。常にお客様のフィードバックに耳を傾け、お客様のニーズに応えるために製品を継続的に改善しています。
結論
本記事では、OpenResty XRay を使用して Node.js アプリケーションの CPU およびディスク IO 使用状況を分析する方法をご紹介しました。また、結果の例をいくつか示し、その意味を説明しました。
OpenResty XRay を使用することで、CPU やディスクリソースを消費しているコードパスと、それらが全体のパフォーマンスにどの程度影響しているかを簡単に特定できます。そして、この情報を活用して Node.js アプリケーションを最適化し、より高速かつスムーズに動作させることができます。
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(マイクロサービスおよび分散トラフィックに最適化された多機能
翻訳
英語版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!