OpenResty XRay を使用してオンラインで CPU 負荷の高い Lua コードパスを素早く特定する方法
このチュートリアルでは、OpenResty XRay を使用して、CPU 時間を最も消費している Lua コードパスを素早く特定する方法をご紹介します。これらのコードパスは、OpenResty または Nginx アプリケーションの CPU 時間の大部分を占めている可能性があります。
問題: 高 CPU 使用率
まず、top
コマンドを実行して、対象サーバーの CPU 使用状況を確認します。ご覧のように、1 つの Nginx ワーカープロセスが CPU コアリソースのほぼ 100% を消費しています。
最も CPU 使用率の高い Lua コードパスを特定
OpenResty XRayを使用して、この未修正のプロセスを検査してみましょう。リアルタイムで分析して、その原因を明確にします。
ブラウザで OpenResty XRayの Web コンソールを開きます。
ログインしていない場合は、まずログインしてください。
アカウント名、つまりメールアドレスを入力してください
パスワードを入力してください。
「ログイン」をクリックします。
現在分析中のマシンが正しいことを確認してください。
「Guided Analysis」ページに移動します。
ここでは、システムが分析可能な様々な種類の問題を確認できます。
「High CPU Usage」を選択します。
「Next」をクリックします。
アプリケーションを選択します。
CPU リソースの 97% を消費しているプロセスを選択します。
アプリケーションのタイプが正しいことを確認します。通常、デフォルト値が正しいです。
OpenResty XRay は、様々な言語レベルで分析を行うことができます。ここでは Lua と C の両方を選択したままにします。
最長分析時間を設定することもできます。ここではデフォルトの 300 秒のままにします。
分析を開始します。
システムは複回数の分析を継続的に実行します。現在、初回の分析を実行中です。
初回の分析が完了し、現在 2 回目のラウンドに入っております。この例では、1 回の分析で十分です。
分析を停止します。
自動生成された分析レポートが表示されます。
レポートには、最も多くの CPU 時間を消費している Lua コードパスが表示されます。
詳細を確認するには、こちらをクリックしてください。
こちらは CPU フレームグラフで、最も負荷の高いコードパスが赤色で表示されています。
最も負荷の高い Lua コードパスには、MD5 計算関数の呼び出しが含まれています。
その後の関数呼び出しは、すべて対象アプリケーションのビジネスコードからのものです。
gen_order_md5
Lua 関数から始まり、アプリケーションのビジネスコード内で正確なソースコード行を特定します。
関数の緑色のボックスにマウスを合わせると、表示されるツールチップで Lua ソースファイル processor.lua
の完全なパスを確認できます。
ソースコードの行番号は 29 です。
アイコンをクリックして、この関数の完全な Lua ソースファイルパスをコピーします。
Vim エディタを使用して、先ほどコピーしたコードパスをここに貼り付け、対応するビジネス Lua コードを確認します。お好みのエディタを使用していただいて構いません。
先ほどのレポートから、コードが 29 行目にあることがわかっています。
この Lua ソースコード行には、実際に md5 計算のループが含まれていることがわかります。
これは、レポートに表示されていた gen_order_md5
関数内にあります。
自動生成レポート
OpenResty XRay はオンラインプロセスを自動的に監視し、分析レポートを生成することができます。
「Insights」ページに切り替えてください。
「Insights」ページでは、日次および週次のレポートを確認することができます。
したがって、「Guided Analysis」機能を必ずしも使用する必要はありません。もちろん、「Guided Analysis」はアプリケーションの開発やデモンストレーションに非常に有用です。
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(マイクロサービスおよび分散トラフィックに最適化された多機能
翻訳
英語版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!