プロセスの最大CPU使用率を取得する

プロセスの最大CPU使用率を取得する

プロセスの最大使用量を取得できますか?

「top」や「ps」などのツールは、すぐにCPU使用率を出力するようです。そして「pidstat」は平均に達したようです...

しかし、スパイクに気づいた人はいますか?

答え1

デフォルトでは、この情報を含むファイルはないようです。

サードパーティのツールを使用してそれを記録してから計算する必要があります。

たとえば、次のスクリプトを使用します。

while true; do uptime >> uptime.log; sleep 1; done

その後、いくつかの処理を実行し、たとえば目的のawkデータを取得します。

これにより、毎分負荷が提供されます。

awk  '{print $1, substr($8, 1, length($8)-1)}' uptime.log

これで最大使用量が得られます。

答え2

考えられる解決策は、psシェルスクリプトを使用し、提案したようにクローンを予約することです。

シェルスクリプトはプロセスの現在のCPU使用率を取得し、以前の最大値と比較し、大きい場合はファイルを更新する必要があります。

#!/bin/bash

CURRENT_VALUE=`ps -p 3445 -o %cpu | sed -n '2p'`
PREVIOUS_VALUE=`sed -n '2p' max_cpu_usage_of_pid.sh.out`

if (( $(echo "$PREVIOUS_VALUE $CURRENT_VALUE" | awk '{print ($1 > $2)}') )); then
        ps -p 3445 -o %cpu > max_cpu_usage_of_pid.sh.out
fi
  • 注 1: max_cpu_usage_of_pid.sh.out ファイルが存在する必要があります。
  • 注 2: bash スクリプトで 2 つの 10 進数を比較するには少し問題があります。 これが解決しました

PS:私はbashスクリプトの専門家ではありません。どんな改善や提案でも歓迎します:)

答え3

短い答えはなし、またはおそらくあなたが探しているものではありません。

プロセスCPU統計はほとんど蓄積されます。オペレーティングシステムは、各瞬間スケジューラを使用して実行するプロセスを決定するため、特定の時点で最小時間値に範囲を狭めると、プロセスはCPUを100%使用します。マルチコアの場合、使用可能なプロセッサの数は1/Nです。

これを得る唯一の方法は、より長いサンプルサイズを使用してから累積値を調べ続けることです。これが実際にトップが機能する方法です。ユーザ jiffy カウンタが以前に 100 であり、現在 150 であれば、その期間中に 50 jiffy の CPU が「消費」されたことがわかります。システムカウンターを見ると、その割合を確認できます。

したがって、リフレッシュ時間が短く、バッチモードを使用して実行などの操作を実行できます。これはあなたの要件に適しているかもしれませんが、なぜこれが必要なのか疑問に思い、システムに関する質問に答えることができますか?

関連情報