私は特定のプロセスのCPU比を監視するためにLinux "top"コマンドを使用しています。値は数秒ごとに変わりますが、別々のファイルやグラフィック表現で値を追跡する方法はありますか?これを行うために使用できるシェルスクリプトはありますか?
答え1
この質問に対する答えは、必要に応じて単純なコマンドであることも、複雑な監視ツールでもあります。
単に実行して開始しtop -b -n 1 >> file.txt
(-bはバッチモードを意味し、-n 1はtopの単一の繰り返し実行を意味します)、出力をfile.txtに保存(追加)できます。たとえば、top -b -n 1 | grep init
「init」プロセスのデータのみを表示したり、top -b -n 1 | grep "init" | head -1 |awk '{print $9}'
initプロセスデータの列9(CPU値)を取得するために「親」出力をフィルタリングしたりできます。
シェルスクリプトで使用するには:
CPU=$(top -b -n1 | grep "myprocess" | head -1 | awk '{print $9}')
MEM=$(top -b -n1 | grep "myprocess" | head -1 | awk '{print $10}')
またはtopを一度だけ実行してください。
read CPU MEM <<<$(top -b -n1 | grep "myprocess" | head -1 | awk '{print $9 " " $10}')
(grep、head、awkを1つのawkコマンドに組み合わせることはできますが、単純化のために別々のコマンドを使用します。)
この例ではtopを使用しましたが、他の指標に代わるものもあります(、、、、、確認、およびsar
/ proc / *を読む)。iostat
vmstat
iotop
ftop
これでデータ(CPU使用率)にアクセスできるようになりました。この例では、これをテキストファイルに追加します。ただし、他のツールを使用してデータを保存してグラフ化することもできます。 gnuplot/python/openofficeを使用してcsvとグラフとして保存し、zabbix、rrdtools、cacti、その他の監視およびグラフツールを使用できます。 CPU使用率、メモリ使用量、ディスクIO、およびカスタム指標(mysql接続数など)などのチャートを収集して描画します。
編集:最後に、あなたの質問に具体的に答えるために簡単なテストのために変更を簡単に追跡するには、top -b -n 1 >> /tmp/file.txt
/ etc / crontabファイルで5分ごとに(または/ 5以下を変更した場合は別の間隔)topを実行できます。
0-59/5 * * * * root top -b -n1 >>/tmp/output.txt
(単一のプロセスデータにのみ興味がある場合は、上記のコマンドでgrep + head -1を使用してください。)
output.txt が大きくなるため、毎日または毎週リセットするには、他の crontab エントリを使用して「rm」できます。
答え2
あなたはそれを使用することができますps -o pid,pcpu $(pgrep particular-process) >> file
。定期的に実行してください。