標準* nixツールを使用してbashスクリプトを使用してコアあたりのCPU使用率を取得する方法

標準* nixツールを使用してbashスクリプトを使用してコアあたりのCPU使用率を取得する方法

dwmを使用するためにbashスクリプトを作成していますxsetroot。すべてが期待どおりに動作します。私が見逃しているのは、*nix標準ツールのみを使用してシステムの各コア(コアが4つあります)の現在の負荷を提供する簡単な方法です。たとえば、を使用してこれを行う方法がわかりませんtop。これまで、このサイトで見つけた他のすべての投稿は負荷平均のみをカバーしています。前にこのようなことをした人はいますか?

私がすべてのコアに適用したい主な理由は、プログラムが私が並列に書いたいくつかのコード(たとえば、すべてのループ)を実行していることを確認できる安価で粗雑なツールを持つことです。

ベストアンサー1

これにより、要素がCPUごとにロードされるbash配列が作成されます。

loads=($(mpstat -P ALL 1 1 | awk '/Average:/ && $2 ~ /[0-9]/ {print $3}'))

Bash配列は0から始まり番号が付けられるため、2番目のCPUの負荷は次のように印刷されます。

echo ${loads[1]}

これにはユーティリティが必要ですmpstat。 Debianシリーズシステムにインストールするには、次の手順を実行します。

apt-get install sysstat

どのように動作しますか?

その結果、やや冗長な出力は次mpstatのようになります。

$ mpstat -P ALL 1 1
Linux 3.2.0-4-amd64 (MyMachine)     08/30/2014      _x86_64_        (2 CPU)

10:12:35 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
10:12:36 PM  all    1.49    0.00    1.49    0.00    0.00    0.00    0.00    0.00   97.01
10:12:36 PM    0    0.00    0.00    2.02    0.00    0.00    0.00    0.00    0.00   97.98
10:12:36 PM    1    1.96    0.00    1.96    0.00    0.00    0.00    0.00    0.00   96.08

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
Average:     all    1.49    0.00    1.49    0.00    0.00    0.00    0.00    0.00   97.01
Average:       0    0.00    0.00    2.02    0.00    0.00    0.00    0.00    0.00   97.98
Average:       1    1.96    0.00    1.96    0.00    0.00    0.00    0.00    0.00   96.08

これはすべてのCPUを表示するように-P ALL指示し、パラメータは毎秒出力を印刷し、最初の秒後に停止するように指示します。mpstat1 1

必要な値のみを選択するには、awk次のコマンドを使用します。

awk '/Average:/ && $2 ~ /[0-9]/ {print $3}'

これにより、最後の数行のみが選択されます(およびで始まる行、Average:2番目の列に数字がある行のみが選択されます)。これらの行に対して、3番目の列(CPUロード)が印刷されます。

括弧を使用すると、mpstatパイプawkの出力が bash 配列としてキャプチャされます。

おすすめ記事