web-dev-qa-db-ja.com

シェルからトップライクなCPU統計を受け取るにはどうすればよいですか?

topから使用中のCPU(パーセント)を正確に読み取ろうとしています。これは、テストのために実行しているコマンドです。

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

これは次を返します:

10.7%us,

私が欲しいデータはどれでしょう?ただし、システムに異なる負荷を適用している場合でも、コマンドを実行するたびに同じ出力が得られます(_htopは言うまでもなく、使用方法が異なります)。 topを起動するたびに、CPU使用率が同じになるようです。数フレーム後にのみ、適切な値が得られます。

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

私はiostatmpstatを試しましたが、値が不正確で「変更が遅い」ようです。

12
n0pe

私はこのスクリプトを使用します( 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) ))
12
jasonwryan

sar もチェックしてください。実装はnixごとに大きく異なる可能性がありますが、特定のスナップショットでの基本的なシステム統計が得られるはずです。コマンドが最初に初期化された時点で値がどれほど正確であるかはわかりませんが、topiostatなどと比較する方法を試してみてください。

出力はtopのように列ベースなので、出力をawkまたはcutにパイプして結果を操作できます。

6
tcdyl

collectlを見たことがありますか?ニーズに合わせて出力を調整できるので便利です。参照: http://collectl.sourceforge.net/

3
ewwhite

私が見つけたものは、少なくともCentOS 6で、上記の質問をした人に似ています。バッチモードでたった1回の繰り返しでトップを実行すると、ほとんどの場合、何が最後に表示を覚えています。 Topは、デルタを取得して正しいパーセンテージを得るには、少なくとも2、3の数字を累積する必要があるようです。 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'"
0
Robert Casey