ps命令输出字段中的%CPU不是进程的实际CPU使用率吗?

ps命令输出字段中的%CPU不是进程的实际CPU使用率吗?

例如,此 BSD 风格命令 , 的输出字段之一ps aux%CPU。替代命令ps -efl输出C(或CP) 字段。

根据ps手册页:

  • %中央处理器是进程的 cpu 利用率,格式为“##.#”。目前,它是使用的 CPU 时间除以进程已运行的时间(cputime/realtime 比率),以百分比表示。
  • C本质上是 %CPU 以整数表示

这就是ps手册页详细信息%CPUC.但互联网上的大多数书籍和网站只是简单地说:%CPU or C is CPU usage of a process

人们可能会认为它是指进程使用的 CPU 处理能力占 CPU 可用总处理能力的百分比。还是只有我一个人这样?

答案1

CPU 时间与实时时间的比率(以多种合理方式之一计算)进程使用的 CPU 处理能力占 CPU 可用总处理能力的百分比的度量。

系统中的每个进程都可以处于两种状态:它要么在处理器上运行,要么正在等待(现实情况比这更复杂,并且有更多的进程状态,但为了简单起见,这个答案没有区分非运行状态,例如可运行、可中断等待、不可中断等待等)。

普通进程通常会花费一些时间在处理器上运行,然后最终等待事件发生(例如数据到达网络连接、磁盘 I/O 完成、锁变得可用、CPU 在可运行进程完成后再次可用)。用完了它的时间量)。

进程在某个时间间隔内在处理器上运行所花费的时间与该间隔的长度之比是一个非常有趣的特性。进程在这一特性上可能存在显着差异,例如,运行科学计算程序的进程很可能最终会使用大量 CPU 和少量 I/O,而您的 shell 主要等待 I/O 并偶尔进行一些处理。

在理想情况下(没有来自调度程序的开销,没有中断等)并且通过完美的测量,系统上每个进程在一秒内使用的 CPU 时间总和将小于一秒,剩余时间是空闲 CPU 时间。随着添加更多进程,尤其是受 CPU 限制的进程,空闲 CPU 时间比例会减少,所有进程每秒使用的总 CPU 时间量接近一秒。此时,添加额外进程可能会导致可运行进程等待 CPU,从而增加运行队列长度(从而增加平均负载)并最终降低系统速度。

请注意,采用进程的整个 CPU 时间与自启动以来经过的时间的简单比率最终代表进程的平均的CPU使用率。由于某些进程在运行时会改变行为(例如数据库服务器等待查询与同一数据库服务器执行许多复杂查询),因此了解最近的 CPU 使用情况通常更有趣。因此,某些系统(例如 FreeBSD、Mac OS X)采用衰减平均值,如下所示:这个联机帮助页:

进程的CPU利用率;这是之前(实时)时间长达一分钟的衰减平均值。由于计算的时基有所不同(因为进程可能非常年轻),因此所有 %cpu 字段的总和可能超过 100%。

Linux 有一个简化的统计,可以根据以下内容提供 CPU 使用情况这个联机帮助页:

CPU 使用率目前表示为进程整个生命周期内运行时间的百分比。这并不理想,并且不符合 ps 在其他方面所遵守的标准。 CPU 使用率加起来不太可能正好达到 100%。

相关内容