稼働時間による平均負荷と、最上位(#9列)で実行中のすべてのプロセスの%CPUの合計が一致するはずだと思いました。しかし、それは真実ではないようです。これが私の小さな実験です:
1台のサーバー:
$ top -b -n 1| awk '{ totuse = totuse + $9 } END { print totuse/100 }'; uptime
6.29
22:00:59 up 28 days, 7:03, 9 users, load average: 7.03, 5.81, 4.51`
別のサーバーの場合:
$ top -b -n 1| awk '{ totuse = totuse + $9 } END { print totuse/100 }'; uptime
4.93
22:01:37 up 29 days, 8:27, 17 users, load average: 18.83, 16.01, 13.86`
では、なぜこの2つの違いがあるのでしょうか。 CPUの使用状況を本当に反映しているのはどれですか?
実行中のプロセスが使用しているCPU使用率を評価しようとすると、これは良い方法ですか。
top -b -n 1 | grep "tim"| awk '{ totuse = totuse + $9 } END { print totuse/100 }'
?
ありがとう、よろしく!
CPU%と負荷平均が一致しない理由は、これらが2つの完全に異なる値であるためです。 CPU%はまさにそれであり、プロセスが使用しているCPUのパーセンテージです。負荷平均は、1分、5分、および15分にわたる実行キュー内のプロセスの加重平均です。
使用しているCPUの量が心配な場合(CPUを完全に使用していますか)、topの出力の集計はうまく機能します。それを時々実行して値を記録することができます(またはsar
を使用すると、それが自動的に行われます)。
負荷平均が高いということは、実行キューに多くのプロセスがあることを意味します。多くのプロセスが準備ができており、実行を待機しています。高負荷は、自動的に多くのCPU使用率を意味するわけではありません。
ウィキペディアには、負荷平均、およびCPU負荷とCPU使用率の違いについて説明した優れた記事があります。 http://en.wikipedia.org/wiki/Load_Average