Perl プロセス内の大きなメモリオブジェクトをオンラインで特定する(OpenResty XRay を使用)
このチュートリアルでは、OpenResty XRay の強力な機能を活用して、アプリケーション内の最大の Perl メモリオブジェクトや値を素早く特定する方法について説明します。データ参照パスを使用して、これらの Perl メモリオブジェクトを正確に特定することができます。また、独自に開発した Perl オブジェクトメモリ分布のフレームグラフについても紹介します。これにより、Perl コード内のメモリリークや大量メモリ使用の問題を簡単に解決することができます。
問題: メモリ使用率が高い
まず、top
コマンドを実行します。
ご覧のように、この Perl プロセスが最も多くのメモリを消費しています。
180MB を超えています。
ps
コマンドを実行して、このプロセスの詳細を確認しましょう。このプロセスが使用している Perl バイナリ実行ファイルは、Linux ディストリビューションに付属のものです。
Perl プロセス内の大きなメモリオブジェクトまたは値を特定
OpenResty XRay を使用して、この未修正のプロセスを検査することができます。システムはリアルタイムで分析を行い、メモリが具体的にどこで消費されているかを特定します。ブラウザで OpenResty XRay の Web コンソールを開きます。
現在分析中のマシンが正しいことを確認してください。
正しくない場合は、リストから再選択することができます。
「Guided Analysis」ページに移動します。
ここでは、システムが分析可能な様々な種類の問題を確認できます。
「High memory usage」を選択します。
「Next」をクリックします。
先ほどの Perl アプリケーションを選択します。
180MB 以上のメモリを消費しているプロセスを選択します。これは先ほど top
で確認したものです。
アプリケーションのタイプが正しいことを確認します。通常、デフォルト値が正しいです。
OpenResty XRay は、様々な言語レベルで分析を行うことができます。ここでは Perl と C/C++ の両方を選択したままにします。
最長分析時間を設定することもできます。ここではデフォルトの 300 秒のままにします。
分析を開始します。
システムは複回数の分析を継続的に実行します。現在、初回の分析を実行中です。
初回の分析が完了し、現在 2 回目のラウンドに入っております。この例では、1 回の分析で十分です。
分析を停止します。
自動生成された分析レポートが表示されます。
これは分析対象の問題タイプであるメモリです。
Libc アロケータによって割り当てられたメモリが大部分を占めており、160 MB を超えていることがわかります。
これは最も多くのメモリを使用している Perl メモリオブジェクトの参照パスです。明らかに、この Perl 仮想マシンは Libc によって割り当てられたメモリの大部分を使用しています。
最大の使用量は Services::Preprocessor
モジュール内にあります。
モジュールのシンボルテーブルには、order_name_cache
という名前の変数があります。
この変数は Perl ハッシュテーブルです。
クリックして詳細を確認してください。
このオブジェクト参照パスは、Perl 言語レベルの GC オブジェクトメモリ分布フレームグラフから自動的に導き出されたものです。
以下は問題についてのより詳細な説明と提案です。データ参照パス内のオブジェクトについて、一つずつ説明しています。
モジュール名 Services::PreProcessor
は Perl ソースファイルのパスに対応しています。したがって、これらを使用してソースファイルを見つけることができます。
ターミナルで、カレントワーキングディレクトリを Perl アプリケーションのソースツリーに切り替えます。
find
コマンドを使用してソースファイルを検索します。
完全なファイルパスをコピーし、vim エディタでソースファイルを開きます。お好みのエディタを使用することができます。
データ参照パスに戻ります。アイコンをクリックして、この Perl ハッシュテーブルの変数名をコピーします。
貼り付けます。ハッシュテーブルがここで定義されていることがわかります。
そして、このハッシュテーブル変数がどのように使用されているかも確認できます。
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(マイクロサービスおよび分散トラフィックに最適化された多機能
翻訳
英文版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!