OpenResty XRay は、同一のコールスタック上でアプリケーション言語・システムライブラリ・カーネルをプロファイリングします。以下は対応テクノロジースタックの完全なサポートマトリクスです。各スタックの分析深度を個別に記載しています。
デモのご予約| テクノロジースタック | CPU フレームグラフ | メモリ分析 | 詳細 |
|---|---|---|---|
| LuaJIT / Lua (OpenResty, Nginx, Kong) | 対応Lua↔C 混合スタック対応 | 参照チェーンレベル — GC オブジェクト参照・割り当てパスの追跡 | 関連記事 → |
| C / C++ | 対応ソースコード行レベルの精度 | アロケータレベル — リーク検出・メモリフラグメンテーション | 関連記事 → |
| Rust | 対応 | アロケータレベル | 関連記事 → |
| Java | 対応 | 参照チェーンレベル — GC 参照分析、Stop-the-World 停止なし | 関連記事 → |
| Go | 対応 | 参照チェーンレベル | 関連記事 → |
| Python | 対応インタプリタ内部まで解析 | 参照チェーンレベル | 関連記事 → |
| Node.js | 対応 | 参照チェーンレベル | 関連記事 → |
| PHP | 対応 | 参照チェーンレベル | 関連記事 → |
| Erlang | 対応 | ワークロードに依存 † | 関連記事 → |
| Perl | 対応 | 参照チェーンレベル | 関連記事 → |
| Ruby | 対応 | ワークロードに依存 † | — |
| OS カーネル | 対応カーネル専用フレームグラフ | ネットワークプロトコルスタック・プロセススケジューラ・システムコール分析 | 関連記事 → |
参照チェーンレベル = OpenResty XRay が GC オブジェクトの参照関係をトラバースし、リークしたメモリを保持しているオブジェクトを特定した上で、割り当てコードパスを提示します。 アロケータレベル = リーク検出・メモリフラグメンテーション・アロケータ動作の分析(オブジェクト参照チェーンは含みません)。前者は「どのオブジェクトが解放されるべきメモリを保持しているか」を特定し、後者は「メモリ総量が増加し続けている」ことを検出します。
Erlang と Ruby は CPU プロファイリングを完全にサポートしています。メモリ分析の深度は、具体的なワークロードおよびランタイムバージョンに依存します。お客様のテクノロジースタックをお知らせいただければ、デプロイ前にお客様の環境で到達可能な分析深度を正確にご説明いたします。
OpenResty XRay は、実行中のプロセスに外部からアタッチします。コード変更・再起動・ライブラリのプリロードは一切不要です。サンプリングのたびに 3 つのレイヤーを横断してスタックアンワインドとシンボル解決を行い、1 本の連続したコールスタックを生成します。
OpenResty XRay は、LuaJIT・CPython・JVM・Go・PHP・Node.js・Erlang・Perl・Ruby といったランタイム自体の内部データ構造を直接解析し、お客様のソースファイルとコード行を復元します。インタプリタの C 関数フレームだけではありません。
Nginx、OpenSSL、glibc、お客様独自のモジュールなど、C・C++・Rust のフレームは、シンボルが除去された本番バイナリであっても、中央シンボルリポジトリを利用してシンボル解決を行います。
スケジューラ、ネットワークプロトコルスタック、メモリ管理、システムコールが同一のコールスタック上に表示されるため、カーネル内でブロックされている off-CPU 時間を、待機の原因となったアプリケーションコードに帰属させることができます。
libcrypto 内の pkey_rsa_decrypt が CPU のほぼ半コア分を消費していました。OpenResty XRay は JWT ライブラリを経由して、ある Lua プラグインの 93 行目まで遡りました。この言語横断のコールチェーンは perf では可視化できません。
複数回の Full GC の後も JVM ヒープが増加し続けていました。OpenResty XRay は実行中の JVM 上で GC オブジェクト参照チェーンをトラバースし、メモリを保持しているデータ構造を特定しました。ヒープダンプ不要、Stop-the-World なし。
診断プロセスを読む →Bilibili 社の本番障害において、全ワーカープロセスの CPU が 100% に達しました。分析は障害発生中に実行中のプロセスに対して直接行われ、事後に再現環境を構築したものではありません。
インシデントレビューを読む →いいえ。主要ディストリビューションのパッケージについては、OpenResty XRay が中央パッケージデータベースからシンボルを解決します。自前でビルドしたオープンソースソフトウェアやお客様独自のプライベートバイナリについては、デバッグシンボルがインストールされている任意のマシン上でエージェントがそれらを自動的にインデックス化するため、本番サーバーにデバッグシンボルを置いておく必要はありません。本番ビルドはそのままで構いません。
はい。サンプリングで得られるコールスタックは 3 つのレイヤーを横断してスタックアンワインドとシンボル解決が行われるため、1 枚のフレームグラフにアプリケーションフレーム、その下の C フレーム、さらにその下のカーネルフレームが同時に含まれます。これにより、CPU を大量に消費する C 関数を、それを呼び出したアプリケーションコードの行に帰属させることができます。
OpenResty XRay エージェントは、ホストマシン上で root 権限を持つ独立したデーモンとして動作します。お客様のアプリケーションプロセスは一切変更されません。コードのインジェクション、ライブラリのプリロード、再起動は行いません。分析タスクが実行されていない間は、アプリケーションプロセスとの接触は一切ありません。対応環境は Linux サーバーのみです。コンテナ環境では、ホスト上のエージェントがそのホスト上の全コンテナ内のプロセスを分析できます。
お客様のテクノロジースタックをお知らせいただければ、デプロイ前にお客様の環境で到達可能な分析深度を正確にご説明いたします。
デモのご予約当社は、お客様の利便性向上のため、クッキーを使用しています。「同意する」をクリックするか、本サイトを継続してご利用いただくことで、クッキーの保存を許可していただきます。
詳細はこちら。