喜我一個Linux程序員的/ proc/[PID]/STAT刷新週期
我有一個爲了使監視器進程的CPU使用,所以我用數據的/ proc/[PID]/STAT№14和15這個價值被稱爲utime和stime。
實施例[/ PROC/[PID]/STAT]
30182 (TTTTest) R 30124 30182 30124 34845 30182 4218880 142 0 0 0 5274 0 0 0 20 0 1 0 55611251 17408000 386 18446744073709551615 4194304 4260634 140733397159392 140733397158504 4203154 0 0 0 0 0 0 0 17 2 0 0 0 0 0 6360520 6361584 33239040 140733397167447 140733397167457 140733397167457 140733397168110 0
狀態5秒鐘後
30182 (TTTTest) R 30124 30182 30124 34845 30182 4218880 142 0 0 0 5440 0 0 0 20 0 1 0 55611251 17408000 386 18446744073709551615 4194304 4260634 140733397159392 140733397158504 4203154 0 0 0 0 0 0 0 17 2 0 0 0 0 0 6360520 6361584 33239040 140733397167447 140733397167457 140733397167457 140733397168110 0
在測試環境中,這個文件刷新1〜2秒,所以我假定這個文件通常由系統更新至少1秒。
所以我用這個計算
process_cpu_usage = ((utime - old_utime) + (stime - old_stime))/ period
在上述值
33.2 = ((5440 - 5274) + (0 - 0))/5
但是,在商用服務器的環境中,用高負荷(CPU和文件IO)過程運行的情況下,的/ proc/[pid]/stat文件更新週期增加20〜60秒!
因此,top/htop實用程序無法測量正確的過程使用值。
爲什麼會出現這種現象?
我們的系統是[CentOS的Linux的發佈1503年7月1日(核心)]