/ proc / [pid] / stat refresh period

时间:2015-07-04 10:01:11

标签: linux centos7

您好我是Linux程序员

我有一个监视进程cpus使用情况的命令,因此我在/ 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版本7.1.1503(核心)]

1 个答案:

答案 0 :(得分:1)

/proc文件系统中的大多数(如果不是全部)文件都是特殊文件,它们在任何给定时刻的内容都反映了当时的实际OS /内核数据,它们不是定期更新内容的文件。请参阅the /proc filesystem doc

特别是/proc/[pid]/stat内容会在相应的进程状态发生更改时发生更改(例如,在每个调度事件之后) - 对于主要处于休眠状态的进程,对于活动/正在运行的进程,这些进程似乎会以较慢的速率“更新”在轻负载系统上以更高的速率运行。例如,检查shell进程的相应文件,该进程不执行任何操作,以及浏览器进程播放某些视频流。

在处于就绪状态的许多进程的负载很重的系统上(例如,this Q&A中提到的那个),可能存在调度延迟,使得文件内容“更新”看起来不那么频繁,尽管进程已准备好/活性。在商业/企业环境中似乎更经常遇到这种情况(有争议,我同意)。