服务器cpu使用率计算规则?

服务器的 CPU 使用率 是衡量服务器性能的重要指标之一。它表示 CPU 在某个时间段内被用于执行任务的程度,通常以百分比(%)表示。


一、CPU 使用率的基本概念

CPU 使用率 = (CPU 实际工作时间 / 总时间) × 100%

例如:在 1 秒内,CPU 工作了 0.6 秒,空闲 0.4 秒,则使用率为 60%。


二、Linux 系统中 CPU 使用率的计算原理

Linux 系统通过 /proc/stat 文件提供 CPU 使用情况的统计信息。

1. /proc/stat 中的数据示例:

cat /proc/stat
cpu  123456 1234 56789 1234567 12345 1234 1234 0

这行数据代表的是自系统启动以来 CPU 的累计使用时间(单位是 jiffies,即时钟滴答数),各字段含义如下:

字段名 含义
user 用户态时间
nice 低优先级用户态时间
system 内核态时间
idle 空闲时间
iowait 等待 I/O 完成的时间
irq 处理硬中断的时间
softirq 处理软中断的时间
steal 被其他操作系统偷走的时间(虚拟化环境)

注意:idleiowait 都是“非使用”状态,但有些监控工具会将 iowait 视为“使用”。


2. 计算公式(两个时间点之间的差值)

假设我们获取两次 CPU 时间:

  • 第一次读取:

    prev_total = user + nice + system + idle + iowait + irq + softirq + steal
    prev_work = user + nice + system + irq + softirq + steal
  • 第二次读取:

    curr_total = ...
    curr_work = ...

则 CPU 使用率计算公式为:

$$
text{CPU Usage} = frac{(curr_work – prev_work)}{(curr_total – prev_total)} times 100%
$$


三、多核 CPU 的处理方式

对于多核 CPU,有两种常见方式:

  1. 每个核心单独计算:适用于分析单个核心负载。
  2. 整体平均计算:把所有核心的使用时间加总后计算平均使用率。

四、实际监控工具中的实现

常见的监控工具如:

  • top/htop
  • mpstat
  • sar
  • nmon
  • Prometheus + node_exporter

它们内部都基于上述 /proc/stat 的机制进行采样和计算。


五、举例说明

假设我们第一次读取 /proc/stat 得到:

user=100, nice=0, system=50, idle=800, iowait=10, irq=5, softirq=5, steal=0

第二次读取得到:

user=110, nice=0, system=60, idle=810, iowait=10, irq=5, softirq=5, steal=0

那么:

  • prev_work = 100 + 0 + 50 + 5 + 5 + 0 = 160
  • curr_work = 110 + 0 + 60 + 5 + 5 + 0 = 180
  • prev_total = 100+0+50+800+10+5+5+0 = 970
  • curr_total = 110+0+60+810+10+5+5+0 = 990

所以:

$$
text{CPU Usage} = frac{180 – 160}{990 – 970} times 100% = frac{20}{20} times 100% = 100%
$$

这个结果意味着在这段时间里 CPU 完全被占用。


六、注意事项

  • 采样间隔很重要:太短可能导致误差大;一般推荐间隔为 1 秒或以上。
  • 虚拟机与容器环境:可能需要考虑 steal 时间。
  • iowait 是否计入使用率:取决于具体监控工具,默认不计入。

七、总结

项目 内容
数据来源 /proc/stat
基本公式 (工作时间差 / 总时间差) × 100%
多核支持 支持
可视化工具 top, htop, mpstat, Prometheus 等
影响因素 采样间隔、iowait 是否计入、是否包含 idle 状态等

如果你有具体的场景(比如用 Python 或 Shell 脚本实现 CPU 使用率监控),我也可以提供代码示例。欢迎继续提问!

未经允许不得转载:云计算HECS » 服务器cpu使用率计算规则?