2015-07-04 54 views
0

喜我一個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日(核心)]

回答

1

大部分(如果不是全部)在/proc文件系統文件是特殊的文件,在任何給定時刻的內容反映實際的OS /內核數據在那個時刻,他們不是內容定期更新的文件。請參閱the /proc filesystem doc

尤其是/proc/[pid]/stat內容在相應進程狀態發生變化時(例如在每個調度事件之後)發生更改 - 對於主要處於睡眠狀態的進程,似乎以較低速率「更新」,而對於更高速率的主動/運行進程在輕載系統上。例如,檢查一個shell進程的相應文件,該進程不會執行任何操作,以及瀏覽器進程正在播放某個視頻流。

在具有在就緒狀態許多過程重負載系統(如在this Q&A提及,例如一個)可以有使該文件內容「更新」調度延遲,儘管過程準備好/活性較少出現。這種情況在商業/企業環境中似乎更常遇到(我同意這個問題有爭議)。