シェルで最高のCPU統計を取得するには?

シェルで最高のCPU統計を取得するには?

私はこれで私が使用しているCPUの量(%)を正確に読み取ろうとしていますtop。テスト用に実行されているコマンドは次のとおりです。

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

これにより、次のものが返されます。

10.7%us,

私が望む正確なデータです。しかし、コマンドを実行するたびにシステムに異なる負荷を適用しても同じ出力が得られます(htop使用法が異なることは言うまでもありません)。起動するたびにtopCPU使用率が同じようです。数フレーム後に正しい値が提供されます。

この方法ではtopの出力を解析できないようで、シェルから正確な読み取りを提供できる他の信頼できるアプリケーションを探しています。htop各コアの読み取り値を提供する方法が本当に好きです。

私はこれを試しましたが、不正確でiostatmpstatゆっくり変化する」値を提供しているようです。

答え1

私はこのスクリプトを使います。アーチボードに登場したイーグル):

#!/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) ))

答え2

確認する男の名前、しかも。各nixの実装は大きく異なる場合がありますが、特定のスナップショットの基本的なシステム統計を提供する必要があります。コマンドが最初に初期化されたときの値がどれだけ正確かはわかりませんが、試してみて比較する方法を確認できますtopiostat

出力はtopと同様に列ベースであるため、結果をパイプawkまたは操作できる必要があります。cut

答え3

見たことがありますかcollectl?必要に応じて出力をカスタマイズして便利です。望むより:http://collectl.sourceforge.net/

答え4

私の結果は、少なくともCentOS 6で上記の質問をした人と似ています。 1回の反復中にバッチモードでtopを実行すると、最後に表示したことを覚えていることから傾向を示すように、同じ数字を収集するようです。 Topは、正確なパーセンテージを提供するために増分のために少なくともいくつかの数を蓄積する必要があるようです。 10回以上の反復テストを経た後、現れる2番目の数字は各実行で十分な違いを示しました。だから合格しやすいです。

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

私はこれをロードの稼働時間とプロセスを選択するpsのgrepフィルタ(postgresクエリなど)と組み合わせるのが好きです。非常に単純なモニターはエイリアスとして表示できます。

alias postgresmon="watch -d 'uptime;top -b -n 2 | grep Cpu | tail -1;ps -ef | grep postgres\: | grep -v idle'"

関連情報