ウェブサイト検索

Cpustat - Linux でプロセスを実行することにより CPU 使用率を監視します


Cpustat は、Go プログラミング言語を使用して書かれた Linux 用の強力なシステム パフォーマンス測定プログラムです。使用率飽和およびエラー (USE) メソッド (システムのパフォーマンスを分析するための方法論) を使用して、CPU の使用率と飽和度を効果的な方法で明らかにしようとします。

システム上で実行されているすべてのプロセスのより高い頻度のサンプルを抽出し、これらのサンプルをより低い頻度で要約します。たとえば、 すべてのプロセスを200 ミリ秒ごとに測定し、特定のメトリクスの最小値/平均値/最大値を含むこれらのサンプルを5秒ごとに要約できます。

推奨読書: Linux のパフォーマンスを監視する 20 のコマンド ライン ツール

Cpustat は、サマリー間隔の純粋なテキスト リストと各サンプルのカラフルなスクロール ダッシュボードの 2 つの方法でデータを出力します。

Linux に Cpustat をインストールする方法

cpustat を使用するには、Linux システムに Go (GoLang) がインストールされている必要があります。インストールされていない場合は、下のリンクをクリックして GoLang のインストール手順に従います。インストールされました:

  1. Linux に GoLang (Go プログラミング言語) をインストールする

Go をインストールしたら、以下の go get コマンドを入力してインストールします。このコマンドは、GOBIN に cpustat バイナリをインストールします。変数:

go get github.com/uber-common/cpustat

Linux で Cpustat を使用する方法

インストールプロセスが完了したら、root 以外のユーザーとしてシステムを制御している場合は sudo コマンドを使用し、root 権限で次のように cpustat を実行します。それ以外の場合は、次のようなエラーが表示されます。

$GOBIN/cpustat
This program uses the netlink taskstats interface, so it must be run as root.

: cpustat およびシステムにインストールされている他のすべての Go プログラムを他のコマンドと同様に実行するには、GOBIN を含めます。 PATH 環境変数の 変数。 Linux で PATH 変数を設定する方法については、以下のリンクを開いてください。

  1. Linux で PATH 変数を永続的に設定する方法を学ぶ

これがcpustat の仕組みです。 /proc ディレクトリがクエリされ、間隔ごとに現在のプロセス ID のリストが取得されます。

  • 各 PID について、/proc/pid/stat を読み取り、前のサンプルとの差を計算します。
  • 新しい PID の場合は、/proc/pid/cmdline を読んでください。
  • 各 PID について、ネットリンク メッセージを送信してタスク統計を取得し、前のサンプルとの差を計算します。
  • /proc/stat を取得して、システム全体の統計情報を取得します。

繰り返しますが、各スリープ間隔は、これらの統計をすべて取得するのに費やされる時間を考慮して調整されます。さらに、各サンプルは、サンプル間の実際の経過時間で各測定をスケールするのに要した時間も記録します。これは、cpustat 自体の遅延を考慮しようとします。

引数なしで実行すると、cpustat はデフォルトで次のように表示します: サンプリング間隔: 200 ミリ秒、要約間隔: 2 秒 (10 サンプル)、上位 10 個のプロシージャを表示、ユーザー フィルター: すべて、pid フィルター: すべて以下のスクリーンショットに示されています。

sudo $GOBIN/cpustat 

上記の出力から、フィールドの前に表示されるシステム全体の概要メトリックの意味は次のとおりです。

  • usr – CPU に対する最小/平均/最大ユーザー モード実行時間の割合。
  • sys – CPU に対する最小/平均/最大システム モード実行時間の割合。
  • 良い – CPU に対する最小/平均/最大ユーザー モードの低優先度の実行時間。
  • アイドル – CPU に対する最小/平均/最大ユーザー モード実行時間の割合。
  • iowait – ディスク IO を待機する最小/平均/最大遅延時間。
  • プルン – 実行可能な状態にあるプロセスの最小/平均/最大数 (負荷平均と同じ)。
  • pblock – ディスク IO でブロックされたプロセスの最小/平均/最大数。
  • pstart – この概要間隔で開始されたプロセス/スレッドの数。

上記の出力から、特定のプロセスについて、さまざまな列は次のことを意味します。

  • 名前 – /proc/pid/stat または /proc/pid/cmdline からの共通プロセス名。
  • pid – プロセス ID。「tgid」とも呼ばれます。
  • – /proc/pid/stat から測定された、pid のユーザー + システム時間の最小サンプル。スケールは CPU のパーセンテージです。
  • 最大 – この PID のユーザー + システム時間の最大サンプル。これも /proc/pid/stat から測定されます。
  • usr – /proc/pid/stat から測定された、概要期間にわたる pid の平均ユーザー時間。
  • sys – 概要期間における pid の平均システム時間。/proc/pid/stat から測定されます。
  • nice – /proc/pid/stat から測定された、プロセスの現在の "nice" 値を示します。高いほど「より良い」という意味になります。
  • runq – プロセスとそのすべてのスレッドが実行可能だが実行を待機しているのに費やした時間。ネットリンク経由の taskstats から測定されます。スケールは CPU のパーセンテージです。
  • iow – プロセスとそのすべてのスレッドがディスク IO によってブロックされた時間。ネットリンク経由のタスク統計から測定されます。スケールは、サマリー間隔全体で平均化された CPU のパーセンテージです。
  • スワップ – プロセスとそのすべてのスレッドがスワップインの待機に費やした時間。ネットリンク経由のタスク統計から測定されます。スケールは、サマリー間隔全体で平均化された CPU のパーセンテージです。
  • vcx および icx – ネットリンク経由の taskstats から測定された、概要間隔におけるプロセスとそのすべてのスレッドによる自発的なコンテキスト スイッチの合計数。
  • rss – /proc/pid/stat から取得された現在の RSS 値。このプロセスが使用しているメモリの量です。
  • ctime – この概要間隔中に終了した子を待機するために消費された user+sys CPU 時間の合計 (/proc/pid/stat から測定)。

時間は子プロセスが終了したときにのみ報告されるため、長時間実行されている子プロセスではこの測定が混乱する可能性があることに注意してください。ただし、これは、CPU 時間が多くの子プロセスによって消費されることが多い、頻繁な cron ジョブやヘルスチェックの影響を測定する場合に役立ちます。

  • 3 番目 – /proc/pid/stat から測定された、概要間隔の終了時のスレッド数。
  • sam – 要約間隔に含まれるこのプロセスのサンプル数。最近開始または終了したプロセスは、サマリー間隔よりも少ないサンプルで表示される可能性があります。

次のコマンドは、システム上で実行されている上位 10 個の root ユーザー プロセスを表示します。

sudo $GOBIN/cpustat -u root

派手なターミナル モードで出力を表示するには、次のように -t フラグを使用します。

sudo $GOBIN/cpustat -u roo -t

上位 x 個のプロセス (デフォルトは 10) を表示するには、-n フラグを使用できます。次のコマンドは、システム上で実行されている上位 20 個の Linux プロセスを表示します。

sudo $GOBIN/cpustat -n 20 

次のように -cpuprofile オプションを使用して CPU プロファイルをファイルに書き込み、cat コマンドを使用してファイルを表示することもできます。

sudo $GOBIN/cpustat -cpuprofile cpuprof.txt
cat cpuprof.txt

ヘルプ情報を表示するには、次のように -h フラグを使用します。

sudo $GOBIN/cpustat -h

cpustat Github リポジトリから追加情報を見つけてください: https://github.com/uber-common/cpustat

それだけです!この記事では、Linux の便利なシステムパフォーマンス測定ツールである cpustat のインストール方法と使用方法を説明しました。以下のコメントセクションを通じてご意見をお聞かせください。