Linuxの「top」コマンドを使用して、特定のプロセスの%CPUを監視しています。値は数秒ごとに変化し続けるので、別のファイルまたはグラフィック表現として値を追跡する方法はありますか?シェルスクリプトを使用してそれを行うことは可能ですか?
この質問に対する答えは、ニーズに応じて、単純なコマンドから複雑な監視ツールまでさまざまです。
top -b -n 1 >> file.txt
(バッチモードの場合は-b、topの単一の反復を実行する場合は-n 1)を実行するだけで開始でき、出力(追加)を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を1回実行します。
read CPU MEM <<<$(top -b -n1 | grep "myprocess" | head -1 | awk '{print $9 " " $10}')
(grep、head、awkは1つのawkコマンドにマージできることに注意してください。簡単にするために、個別のコマンドを使用しています)。
この例ではtopを使用しましたが、他のメトリックには別の方法があります(sar
、iostat
、vmstat
、iotop
、ftop
を確認してください、さらには/ proc/*を読んでください。
これで、データ(CPU使用率)にアクセスする方法ができました。この例では、テキストファイルに追加しています。ただし、他のツールを使用してデータを保存し、グラフ化することもできます。csvに保存してgnuplot/python/openofficeでグラフ化し、zabbix、rrdtools、cactiなどのモニタリングおよび把握ツールを使用します。監視ツールには、 CPU使用率、メモリ使用量、ディスクIO、さらにはカスタムメトリック(mysql接続の数など)などのデータを収集してグラフ化します。
編集:最後に、具体的に質問に答えるために、簡単なテストで変更を簡単に追跡したい場合は、/ etc/crontabファイルでtop -b -n 1 >> /tmp/file.txt
を実行できます。以下の/ 5を交換した場合の時間間隔)。
0-59/5 * * * * root top -b -n1 >>/tmp/output.txt
(単一のプロセスデータでのみテストしている場合は、上記のコマンドのgrep + head -1)。
Output.txtは大きくなるため、毎日または毎週リセットする場合は、別のcrontabエントリを使用して「rm」することができます。
ps -o pid,pcpu $(pgrep particular-process) >> file
を使用できます。定期的に実行してください。