プロセスごとに使用状況メトリックの履歴を表示するにはどうすればいいですか?

プロセスごとに使用状況メトリックの履歴を表示するにはどうすればいいですか?

ここで私が最初に思いつくのは、SAR または sysstat パッケージ全体に組み込まれているものです。しかし、それが事実であるとしても、この解決策は見つからないようです。

私が見たいのは、できれば sysstat 経由で、SAR ログとほぼ同じ形式のプロセス使用状況 (メモリ、CPU など) の履歴ログです (何らかの方法で SAR ファイルから直接入手できない場合)。監視ソフトウェアが利用できることは知っていますが、私はむしろ、ほとんど邪魔にならないパッケージ、そして実際には statsd/collectd 経由で比較的直感的に解析できるものを探しています。

答え1

sar コマンドをバックグラウンド プロセスとして実行します。構文は次のとおりです。

sar -o datafile interval count >/dev/null 2>&1 &

すべてのデータはバイナリ形式でキャプチャされ、ファイル (データファイル) に保存されます。その後、データは sar コマンドで -f オプションを使用して選択的に表示できます。interval および count パラメータを設定して、interval 秒間隔で count レコードを選択します。count パラメータが設定されていない場合は、ファイルに保存されているすべてのレコードが選択されます。この方法でデータを収集すると、一定期間のシステム使用状況の特徴を把握し、ピーク使用時間を判断するのに役立ちます。

答え2

上位プロセスのリソース使用量を 5 分ごとに出力するダム while ループを使用できます。

while true; do
  date;
  ps -eo pid,ppid,cmd,%mem,%cpu --sort=-pcpu | head;
  echo;
  sleep 300;
done

上記は、CPU 使用率が最も高い上位 9 つのプロセスを出力します。メモリを最も多く使用している上位 9 つのプロセスを取得するには、次のコマンドを使用します。

while true; do
  date;
  ps -eo pid,ppid,cmd,%mem,%cpu --sort=-pmem | head;
  echo;
  sleep 300;
done

次の出力例は、Apache が明らかに CPU を最も多く消費するプロセスであることを示しています。

Sun Jan 28 23:46:28 UTC 2024
  PID  PPID CMD                         %MEM %CPU
25130 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.7
12878 11432 /usr/sbin/httpd -DFOREGROUN  0.2  2.5
23903 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.4
  898 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
  902 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
  910 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
 8397 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
 9263 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
23911 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2

Sun Jan 28 23:51:28 UTC 2024
  PID  PPID CMD                         %MEM %CPU
25130 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.6
12878 11432 /usr/sbin/httpd -DFOREGROUN  0.2  2.4
23903 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.4
  898 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
  902 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
  910 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
 8397 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
 9263 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
23911 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2

制限事項

明らかにこれはダメだ。なぜなら、瞬時のコマンドが実行された瞬間のリソース使用量 (5 分ごと)。

理想的には、平均リソース使用量を間隔出力間の時間。しかし、この回答は 7 年間公開されており、良い回答がないので、何もないよりはましです。

一晩セッションで実行したままにしておくscreenと、朝までにはより良い洞察が得られます (最小限の労力で)。

関連情報