CockroachDB における CPU 時間の消費状況(OpenResty XRay を使用)
このチュートリアルでは、OpenResty XRay を使用して、Go 言語で実装された CockroachDB データベースにおける CPU 時間の消費状況を分析します。どの Go コードパスが最も CPU 時間を消費しているかを示します。OpenResty XRay は、Go 言語レベルの CPU フレームグラフを自動的に分析・解釈し、パフォーマンスのボトルネックを素早く特定するのに役立ちます。
問題:高 CPU 使用率
CockroachDB は Go(golang)言語で書かれた分散データベースです。実行中の CockroachDB サーバーの CPU 時間がどのように配分されているかを分析します。
CPU 使用状況を確認するために top
コマンドを使用します。
このプロセスが 250% 以上の CPU リソースを使用していることがわかります。
ps
コマンドを実行してこのプロセスの完全なコマンドラインを確認します。このプロセスは、Linux ディストリビューションに付属する Cockroach バイナリ実行ファイルを使用しています。
Cockroach での CPU 時間の消費状況を分析
OpenResty XRay を使用して、この未修正のプロセスを検査することができます。システムはリアルタイムで分析を行い、原因を特定します。
現在分析中のマシンが正しいことを確認してください。
正しくない場合は、リストから再選択することができます。
「Guided Analysis」ページに移動します。
ここでは、システムが分析可能な様々な種類の問題を確認できます。
「High CPU usage」を選択します。
「Next」をクリックします。
「By Processes」を選択します。
CPU リソースの 200% 以上を消費しているプロセスを選択します。これは先ほど top
で確認したものです。
アプリケーションのタイプが正しいことを確認します。通常、デフォルト値が正しいです。
ここでの言語レベルは「Go」のみとなっています。
最長分析時間を設定することも可能です。ここではデフォルトの 300 秒のままにします。
分析を開始します。
システムの分析は継続的に複数回実行します。現在、初回の分析を実行中です。
初回の分析が完了し、現在 2 回目のラウンドに入っております。この例では、1 回の分析で十分です。
分析を停止します。
自動生成された分析レポートをご確認しましょう。
これが分析対象の問題タイプ、「CPU」です。
Go ランタイムの GC ガベージコレクションが CPU 時間の約 13% を占めています。
この Go コードパスで新しく作成された GC オブジェクトの数は、新規作成された GC オブジェクトの総数の約 25% を占めています。
現在実行中のものは、RunAsyncTaskEx
関数内で作成された無名関数で、CockroachDB システム内のさまざまな非同期タスクのライフサイクルを管理するために使用されています。
詳細を見るには「More」をクリックします。
このホットコードパスは、Go レベルの GC オブジェクトメモリ分布フレームグラフから自動的に導き出されたものです。
フレームグラフを拡大します。
さらにクリックして拡大します。
このホットコードパスは、kvcoord
パッケージ、
Raft プロトコル、
sqlMux
コンポーネントの 3 つの主要部分で構成されています。
kvcoord/dist_sender
をクリックして拡大します。
kvcoord
は CockroachDB のキー値コーディネーターモジュールで、並行アクセスとデータの一貫性を処理します。複数の kvclient
インスタンス間の並行操作を調整し、データの正確性と一貫性を確保する役割を担っています。
Start
関数をクリックして拡大します。
Raft は CockroachDB が使用する分散コンセンサスプロトコルで、データのレプリケーションと障害耐性を実現するために使用されます。CockroachDB は分散データベースアーキテクチャを採用しており、複数の kvserver
ノードが協調して高可用性とスケーラビリティを提供しています。
sqlMux
関数に進みます。
sqlMux
は CockroachDB のノード上で SQL リクエストのルーティングと多重化を処理するために使用されます。
これらは GC オブジェクトを最も多く割り当てている他のコードパスです。
これは 2 番目の GC オブジェクト割り当てパスです。
CockroachDB の SQL レイヤーにある makeExecPlan()
関数は、クエリ実行プランを作成します。
3 番目の GC オブジェクト割り当てパスを見てみましょう。
列データストリームを処理する際、nextAdapter()
の呼び出しも多数の GC オブジェクトを作成します。
これは 4 番目の GC オブジェクト割り当てパスです。
execStmt
関数も実行過程で多数の GC オブジェクトを作成します。
GC オブジェクトの収集が CPU 時間の約 10% を占めています。
完全自動化された分析レポー
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(マイクロサービスおよび分散トラフィックに最適化された多機能
翻訳
英語版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!