私は、定期的に top をスクレイピングするなどの操作を行う代わりに、プロセス アカウンティングを使用して、私たちの環境で問題となるスクリプトを実行しているさまざまなユーザーとサイトを追跡することを検討してきました。
特に明確でないのは、どの分野が本当に使用された CPU の秒数/分数を示します。私が読んだマニュアル ページには、「cpu」列は消費された秒数を表すと書かれていますが、-m - で表示される「cp」列もあり、異なる合計値が表示されることがあります。たとえば、次のようになります。
-mフラグを使用すると、
$sa -m | grep username
username 14944 65.53re 29.90cp 5308k
-u フラグを使用して「cpu」の列を合計すると、次のようになります。
sa -u |grep username|awk 'BEGIN{TOTAL=0}{TOTAL=TOTAL+$2}END{print TOTAL}'
1032.86
これら 2 つの異なるモードの「cp」列と「cpu」列の違いを理解できる人はいますか?
ありがとう!
答え1
上記の結果が何を示しているかを説明するために、例を挙げてみましょう。
まず、ユーザーに patrickr として実行し、システムに目に見えるほどの負荷をかけることを目的とした bash スクリプトを作成しました。
#!/bin/bash
#this file is named loop_script.sh
for i in {1..5000}
do
echo "Welcome $i times"
done
2 つ目: acct をアンインストールしてから再インストールしたので、/var/log/acct のファイルは最新の状態になっています。/var/log/acct/pacct ファイルのコピーを作成しておけば、今後は適切にフォーマットされたファイルで簡単に切り捨てることができます (ファイルを削除して再作成するだけではだめです。そうすると sa が機能しなくなります)。このファイルはシステム上のすべてのコマンドのログであり、私が知る限り、期間に基づいてログの一部を取り出す方法はないことに注意してください。
3番目: その後、このスクリプトをpatrickrとして2回実行しました。
patrickr@hostname:~$ bash loop_script.sh
結果をお伝えし、それについて説明します。
root (またはpatrickr以外のユーザー)として実行 patrickrとして最初のループの後:
**sa -m**
24 0.09re 0.03cp 0avio 894k
root 22 0.07re 0.02cp 0avio 853k
patrickr 2 0.02re 0.01cp 0avio 1336k
**sa -u |grep patrickr**
patrickr 0.38 cpu 1336k mem 0 io bash
patrickr として 2 回目のループを実行した後:
**sa -m**
30 0.09re 0.03cp 0avio 850k
root 27 0.07re 0.02cp 0avio 814k
patrickr 3 0.02re 0.01cp 0avio 1178k
**sa -u |grep patrickr**
patrickr 0.38 cpu 1336k mem 0 io bash
patrickr 0.35 cpu 1336k mem 0 io bash
patrickr 0.00 cpu 863k mem 0 io ls (I happened to also run ls at patrickr)
**sa -u**
The results returned 106 results for a total of 2.86cpu that averaged to 0.03cp
表示される内容は次のとおりです:
sa -m は、このサーバーのすべてのアクティビティの平均を時間経過とともに表示します。このファイルは、実行されるコマンドが増えるにつれて、時間の経過とともに大きくなります。
sa -u | grep patrickr は、特定のコマンドのシステム時間とユーザー時間の合計を CPU 分単位で表示します。
実行中: sa -u |grep patrickr|awk 'BEGIN{TOTAL=0}{TOTAL=TOTAL+$2}END{print TOTAL}'
ユーザー patrick の合計が表示されますが、sa -m コマンドは実際には平均値を表示します。2 番目の例が必要な場合は、メモリ値を確認してください。これらも平均値です。
patrickr について上記にリストした 3 つの結果 (.35 + .37 + .0) を加算し、106 で割って小数点第 1 位に丸めると、0.01cp になります。
0.01cp の結果は、acct アプリケーションがインストールされた時点 (つまり、ファイル /var/log/acct/pacct が追跡を開始してから) からのシステム上のすべての負荷と比較した、システム上のユーザー patrickr の平均負荷です。
Output Fields
cpu - sum of system and user time in cpu minutes
re - actual time in minutes
k - cpu-time averaged core usage, in 1k units
k*sec - cpu storage integral (kilo-core seconds)
u - user cpu time in cpu minutes
s - system time in cpu minutes