このチュートリアルでは、OpenResty XRay を使用して、CPU 時間を最も消費している Lua コードパスを素早く特定する方法をご紹介します。これらのコードパスは、OpenResty または Nginx アプリケーションの CPU 時間の大部分を占めている可能性があります。

問題: 高 CPU 使用率

まず、top コマンドを実行して、対象サーバーの CPU 使用状況を確認します。ご覧のように、1 つの Nginx ワーカープロセスが CPU コアリソースのほぼ 100% を消費しています。

Screenshot

最も CPU 使用率の高い Lua コードパスを特定

OpenResty XRayを使用して、この未修正のプロセスを検査してみましょう。リアルタイムで分析して、その原因を明確にします。

ブラウザで OpenResty XRayの Web コンソールを開きます。

Screenshot

ログインしていない場合は、まずログインしてください。

Screenshot

アカウント名、つまりメールアドレスを入力してください

Screenshot

パスワードを入力してください。

Screenshot

「ログイン」をクリックします。

Screenshot

現在分析中のマシンが正しいことを確認してください。

Screenshot

「Guided Analysis」ページに移動します。

Screenshot

ここでは、システムが分析可能な様々な種類の問題を確認できます。

Screenshot

「High CPU Usage」を選択します。

Screenshot

「Next」をクリックします。

Screenshot

アプリケーションを選択します。

Screenshot

CPU リソースの 97% を消費しているプロセスを選択します。

Screenshot

アプリケーションのタイプが正しいことを確認します。通常、デフォルト値が正しいです。

Screenshot

OpenResty XRay は、様々な言語レベルで分析を行うことができます。ここでは Lua と C の両方を選択したままにします。

Screenshot

最長分析時間を設定することもできます。ここではデフォルトの 300 秒のままにします。

Screenshot

分析を開始します。

Screenshot

システムは複回数の分析を継続的に実行します。現在、初回の分析を実行中です。

Screenshot

初回の分析が完了し、現在 2 回目のラウンドに入っております。この例では、1 回の分析で十分です。

Screenshot

分析を停止します。

Screenshot

自動生成された分析レポートが表示されます。

Screenshot

レポートには、最も多くの CPU 時間を消費している Lua コードパスが表示されます。

Screenshot

詳細を確認するには、こちらをクリックしてください。

Screenshot

こちらは CPU フレームグラフで、最も負荷の高いコードパスが赤色で表示されています。

Screenshot

最も負荷の高い Lua コードパスには、MD5 計算関数の呼び出しが含まれています。

スクリーンショット

その後の関数呼び出しは、すべて対象アプリケーションのビジネスコードからのものです。

Screenshot

gen_order_md5 Lua 関数から始まり、アプリケーションのビジネスコード内で正確なソースコード行を特定します。

Screenshot

関数の緑色のボックスにマウスを合わせると、表示されるツールチップで Lua ソースファイル processor.lua の完全なパスを確認できます。

Screenshot

ソースコードの行番号は 29 です。

スクリーンショット

アイコンをクリックして、この関数の完全な Lua ソースファイルパスをコピーします。

Screenshot

Vim エディタを使用して、先ほどコピーしたコードパスをここに貼り付け、対応するビジネス Lua コードを確認します。お好みのエディタを使用していただいて構いません。

スクリーンショット

先ほどのレポートから、コードが 29 行目にあることがわかっています。

スクリーンショット

この Lua ソースコード行には、実際に md5 計算のループが含まれていることがわかります。

スクリーンショット

これは、レポートに表示されていた gen_order_md5 関数内にあります。

Screenshot

自動生成レポート

OpenResty XRay はオンラインプロセスを自動的に監視し、分析レポートを生成することができます。

Screenshot

「Insights」ページに切り替えてください。

Screenshot

「Insights」ページでは、日次および週次のレポートを確認することができます。

Screenshot

したがって、「Guided Analysis」機能を必ずしも使用する必要はありません。もちろん、「Guided Analysis」はアプリケーションの開発やデモンストレーションに非常に有用です。

Screenshot

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 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

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