我/proc/<pid>/stat
为所有进程添加了用户 cpu、系统 cpu、子用户和子系统 cpu。我从之前的样本中获取了增量。
在我对用户、nice 和系统 CPU 进行求和之后,/proc/stat
应该是整个盒子的。我再次采取三角洲。
进程的总和几乎总是略大于整个处理器的总和,我不明白为什么。
答案1
造成这种情况的原因有几个,最明显的一个是每个进程的会计使用不同的逻辑来计算不同的事物。
两个具体例子:
- 系统
stat
有一个nice
列,用于计算用户在好任务(较低优先级)上花费的时间 - 您没有指定您使用的时间,所以我猜您没有对其进行求和。在此过程中,这将被计为标准用户时间。 iowait
时间 - 您也没有考虑到 - 可能在该过程中算作stat
系统时间。但同时计算iowait
时间是个坏主意,因为它对实际时间的计算非常不可靠,如下man proc
所示:
iowait(自 Linux 2.5.41 起)
(5) 等待I/O完成的时间。该值并不可靠,原因如下:
CPU不会等待I/O完成; iowait 是任务等待 I/O 完成的时间。当CPU因未完成的任务I/O而进入空闲状态时,将在该CPU上调度另一个任务。
在多核CPU上,等待I/O完成的任务不在任何CPU上运行,因此每个CPU的iowait很难计算。
在某些情况下,该字段的值可能会减少。
最后,我必须指出,我相信这种类型的记帐是无用的,因为它对于任何严肃的目的来说永远都不够准确 - 系统和进程计数器出于不同的目的在系统的不同部分进行处理,并且永远不会匹配到任何有用的程度。