シェルからトップレベルのCPU統計を受信するにはどうすればよいですか?


12

使用済みのCPUの正確な読み取り(%)を取得しようとしていますtop。これは、テストのために実行しているコマンドです。

top -n1 | awk '/Cpu\(s\):/ {print $2}'

これは返します:

10.7%us,

これは、私が欲しい適切なデータです。ただし、コマンドを実行するたびに、システムに異なる負荷を適用している場合でも、同じ出力が得られます(もちろんhtop、使用法が異なることを教えてくれます)。起動するたびにtop、CPU使用率は同じようです。数フレーム後に適切な値が得られます。

この方法でtopの出力を解析できるようには思えないので、シェルからの正確な読み取りを可能にする他の信頼できるアプリケーションを探しています。htopコアごとの測定値を取得する方法が大好きです。

私が試したiostatし、mpstat彼らは不正確で、「変化に遅い」値を与えるように見えます。


2
しないでください。適切な質問は、シェルからトップレベルのCPU使用統計を取得するにはどうすればよいですか?
ステファンギメネス

私は私の質問に変更StéphaneGimenez感謝@
n0pe

回答:


12

私はこのスクリプトを使用します(Archボードのこのスレッドから):

#!/bin/bash
read cpu a b c previdle rest < /proc/stat
prevtotal=$((a+b+c+previdle))
sleep 0.5
read cpu a b c idle rest < /proc/stat
total=$((a+b+c+idle))
CPU=$((100*( (total-prevtotal) - (idle-previdle) ) / (total-prevtotal) ))

Linuxの/ proc /にはすばらしい情報があります。すべての利点については、linux.die.net / man / 5 / procを参照してください。これらはLinuxのみであることに注意してください。Sigarなどのライブラリを使用しない限り、クロスプラットフォームでその情報を取得する方法はありません。
パットノッツ

アイデアは良いのですが、一部の詳細が間違っています。アイドル値は5番目の列であり、iowait列(6番目の列)も追加して、適切な割合を取得する必要があります。完全に正確にするには、すべての「残り」の値も追加する必要がありますが、多くの場合非常に小さい値です。
ピーターアイゼントラウト

「cpu」列をカウントしている場合、アイドル値は5番目の列です。それ以外の場合は、4番目です。
SunSparc 14

6

sarもチェックしてください。実装はnixからnixまで大きく異なる可能性がありますが、特定のスナップショットで基本的なシステム統計を提供する必要があります。私は確信した値は、コマンドが最初に初期化された時点であるか正確ではないんだけど、あなたはそれがと比較する方法を参照して遊んかもしれないtopiostatなど、

出力はtopのように列ベースであるため、出力をパイプ処理したり、結果を操作しawkたりできる必要がcutあります。


私はsar以前にさまざまな結果で試しました。ここでは、@ jasonwryanの回答に進みます。これは、CPUコアの両方の使用状況を表すように簡単に変更できるためです。
n0pe


0

私が見つけたのは、少なくともCentOS 6で上記の質問をした人と似ています。たった1回の反復でバッチモードでtopを実行すると、ほとんどの場合、その傾向は最後に表示を記憶します。Topは、デルタを取得して正しい割合を得るために、少なくとも数個の数値を蓄積する必要があるようです。10回以上の反復をテストした結果、ポップアップした2番目の図は、実行ごとに十分な差異を示していることがわかりました。したがって、この行を簡単に取得するには

top -b -n 2 | grep Cpu | tail -1

ロード時の稼働時間と、postgresクエリなどのpsからの選択プロセスのgrepフィルターにこれを組み込むのが好きです。エイリアスを使用して、非常に単純なモニターを表現できます。

alias postgresmon="watch -d 'uptime;top -b -n 2 | grep Cpu | tail -1;ps -ef | grep postgres\: | grep -v idle'"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.