返回

如何在 Linux 中精确计算 CPU 使用率?

Linux

在 Linux 系统中精确计算 CPU 使用率

问题

计算 CPU 使用率似乎是一项简单的任务,但要获得准确的结果却并不容易。许多常用的方法都有其缺陷,例如只使用 /proc/stat 文件中的前 4 个字段。

准确的方法

准确计算 CPU 使用率的正确方法是读取 /proc/stat 文件中的所有字段,包括每个 CPU 核心从 Linux kernel 2.6.33 开始出现的 10 个字段。

排除字段

并非 /proc/stat 文件中的所有字段都应包含在 CPU 使用率计算中。例如,guest_niceguest fields 应排除在外,因为它们已包含在 niceuser 字段中。

计算

要计算 CPU 使用率,需要从两个采样(例如,每秒一次)中获取 /proc/stat 文件的值。然后,使用以下公式计算每个 CPU 核心和总体系统使用率:

CPU 使用率 = [(非空闲时间 - 空闲时间) / (采样间隔 * 核心数)] x 100

其中:

  • 非空闲时间 是用户、系统、中断、软中断和等待时间字段之和。
  • 空闲时间 是空闲字段的值。
  • 采样间隔 是两次采样之间的秒数。
  • 核心数 是系统的 CPU 核心数。

示例

假设以下两次采样:

采样 1

user         12345
nice         2345
system       3456
idle         78901

采样 2

user         15678
nice         3456
system       5678
idle         77891

使用上述公式计算 CPU 使用率:

  • 非空闲时间 = 15678 + 3456 + 5678 = 24812

  • 空闲时间 = 77891

  • 采样间隔 = 1 秒

  • 核心数 = 1(单核 CPU)

  • CPU 使用率 = [(24812 - 77891) / (1 * 1)] x 100 = 23.7%

结论

使用此方法可以准确计算 Linux 系统的 CPU 使用率。请注意,对于多核系统,需要对每个核心重复计算并求和以获得整体系统使用率。

常见问题解答

1. 为什么需要从 /proc/stat 中读取所有字段?

并非所有字段都用于计算 CPU 使用率,但排除不相关的字段非常重要,以免导致不准确的结果。

2. 如何确定采样间隔?

采样间隔取决于所需的精度。较短的间隔会产生更精确的结果,但会增加系统开销。

3. 我可以为每个 CPU 核心单独计算使用率吗?

是的,可以使用相同的方法为每个 CPU 核心计算单独的使用率。

4. 如何从脚本中自动计算 CPU 使用率?

您可以使用 Python 或 shell 脚本读取 /proc/stat 文件并应用上述公式。

5. 我可以在哪里找到其他资源来了解 CPU 使用率?