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


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

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

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

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

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

  1. Install GoLang (Go Programming Language) in Linux

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

# go get github.com/uber-common/cpustat

LinuxでCpustatを使用する方法

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

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

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

  1. Learn How to Set Your $PATH Variables Permanently in Linux

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

  • for each PID, read /proc/pid/stat, then compute difference from previous sample.
  • in case it’s a new PID, read /proc/pid/cmdline.
  • for each PID, send a netlink message to fetch the taskstats, compute difference from previous sample.
  • fetch /proc/stat to get the overall system stats.

この場合も、各スリープ間隔は、これらすべての統計のフェッチに費やされた時間を考慮して調整されます。さらに、各サンプルには、サンプル間の実際の経過時間によって各測定値をスケーリングするのにかかった時間も記録されます。これは、cpustat自体の遅延を説明しようとします。

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

$ sudo $GOBIN/cpustat 

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

  • usr – min/avg/max user mode run time as a percentage of a CPU.
  • sys – min/avg/max system mode run time as a percentage of a CPU.
  • nice – min/avg/max user mode low priority run time as a percentage of a CPU.
  • idle – min/avg/max user mode run time as a percentage of a CPU.
  • iowait – min/avg/max delay time waiting for disk IO.
  • prun – min/avg/max count of processes in a runnable state (same as load average).
  • pblock – min/avg/max count of processes blocked on disk IO.
  • pstart – number of processes/threads started in this summary interval.

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

  • name – common process name from /proc/pid/stat or /proc/pid/cmdline.
  • pid – process id, also referred to as “tgid”.
  • min – lowest sample of user+system time for the pid, measured from /proc/pid/stat. Scale is a percentage of a CPU.
  • max – highest sample of user+system time for this pid, also measured from /proc/pid/stat.
  • usr – average user time for the pid over the summary period, measured from /proc/pid/stat.
  • sys – average system time for the pid over the summary period, measured from /proc/pid/stat.
  • nice – indicates current “nice” value for the process, measured from /proc/pid/stat. Higher means “nicer”.
  • runq – time the process and all of its threads spent runnable but waiting to run, measured from taskstats via netlink. Scale is a percentage of a CPU.
  • iow – time the process and all of its threads spent blocked by disk IO, measured from taskstats via netlink. Scale is a percentage of a CPU, averaged over the summary interval.
  • swap – time the process and all of its threads spent waiting to be swapped in, measured from taskstats via netlink. Scale is a percentage of a CPU, averaged over the summary interval.
  • vcx and icx – total number of voluntary context switches by the process and all of its threads over the summary interval, measured from taskstats via netlink.
  • rss – current RSS value fetched from /proc/pid/stat. It is the amount of memory this process is using.
  • ctime – sum of user+sys CPU time consumed by waited for children that exited during this summary interval, measured from /proc/pid/stat.

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

  • thrd – number of threads at the end of the summary interval, measured from /proc/pid/stat.
  • sam – number of samples for this process included in the summary interval. Processes that have recently started or exited may have been visible for fewer samples than the summary interval.

次のコマンドは、システムで実行されている上位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をインストールして使用する方法を紹介しました。以下のコメントセクションを介して私たちとあなたの考えを共有してください。