私はこれで私が使用しているCPUの量(%)を正確に読み取ろうとしていますtop
。テスト用に実行されているコマンドは次のとおりです。
top -n1 | awk '/Cpu\(s\):/ {print $2}'
これにより、次のものが返されます。
10.7%us,
私が望む正確なデータです。しかし、コマンドを実行するたびにシステムに異なる負荷を適用しても同じ出力が得られます(htop
使用法が異なることは言うまでもありません)。起動するたびにtop
CPU使用率が同じようです。数フレーム後に正しい値が提供されます。
この方法ではtopの出力を解析できないようで、シェルから正確な読み取りを提供できる他の信頼できるアプリケーションを探しています。htop
各コアの読み取り値を提供する方法が本当に好きです。
私はこれを試しましたが、不正確でiostat
「mpstat
ゆっくり変化する」値を提供しているようです。
答え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の実装は大きく異なる場合がありますが、特定のスナップショットの基本的なシステム統計を提供する必要があります。コマンドが最初に初期化されたときの値がどれだけ正確かはわかりませんが、試してみて比較する方法を確認できますtop
。iostat
出力は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'"