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

服务器 CPU 使用率的计算规则,本质上是操作系统通过统计 CPU 在一段时间内用于不同任务的时间比例来得出的。下面是详细的计算规则和原理:


🧠 一、CPU 使用率的基本定义

CPU 使用率(CPU Utilization) 是指在某个时间段内,CPU 被用于执行任务(用户进程、系统进程等)的时间占总时间的百分比。

单位通常是:%(百分比)


📊 二、Linux 系统中 CPU 使用率的计算方式

在 Linux 中,CPU 使用情况可以从 /proc/stat 文件中获取。这个文件记录了 CPU 各个状态的时间累计值(以 时钟滴答 tick 为单位,通常每秒有 100 或 1000 个 tick)。

示例 /proc/stat 内容:

cpu  123456 7890 23456 345678 9876 1234 5678 0 0 0

字段含义如下:

字段 描述
user 用户态时间(不包括 nice)
nice 用户态低优先级进程时间
system 内核态时间
idle 空闲时间
iowait 等待 I/O 完成时间
irq 硬中断服务时间
softirq 软中断服务时间
steal 被其他操作系统偷走的时间(虚拟化环境)
guest 运行虚拟客户机所花时间
guest_nice 运行低优先级虚拟客户机时间

注意:前 8 个字段是最常见的,后续两个可选。


🧮 三、CPU 使用率计算公式(两时刻差值法)

要计算 CPU 使用率,需要两次读取 /proc/stat 的值,间隔一定时间(如 1 秒),然后根据差值进行计算。

步骤如下:

  1. 第一次读取 cpu 行数据:total1, idle1
  2. 等待一段时间(比如 1s)
  3. 第二次读取 cpu 行数据:total2, idle2
  4. 计算使用率:
# 总时间 = 所有非空闲时间之和
total = user + nice + system + irq + softirq + steal + guest + guest_nice
idle = idle + iowait

# 两次采样之间的总时间和空闲时间
total_diff = total2 - total1
idle_diff = idle2 - idle1

# CPU 使用率 = (总使用时间 / 总时间) * 100%
cpu_usage = (total_diff - idle_diff) / total_diff * 100

📈 四、实际示例(Python 伪代码)

def get_cpu_usage():
    with open('/proc/stat', 'r') as f:
        line = f.readline()
    parts = list(map(int, line.split()[1:]))

    user, nice, system, idle, iowait, irq, softirq, steal, _, _ = parts
    total = user + nice + system + irq + softirq + steal
    idle_total = idle + iowait

    # 上次采集的数据
    global last_total, last_idle
    if last_total is None:
        last_total, last_idle = total, idle_total
        return 0

    delta_total = total - last_total
    delta_idle = idle_total - last_idle
    cpu_usage = (delta_total - delta_idle) / delta_total * 100

    last_total, last_idle = total, idle_total
    return cpu_usage

📌 五、注意点

  • 采样间隔不能太短或太长:建议 0.5~1 秒之间。
  • 多核处理:每个核心都有自己的 cpu0, cpu1, … 条目。可以分别计算,也可以汇总平均。
  • 虚拟化影响:在虚拟机中,steal 时间也会影响 CPU 使用率。
  • 工具依赖:top、htop、mpstat、vmstat、sar 等命令底层也是基于 /proc/stat 实现的。

✅ 六、总结

项目 说明
数据来源 /proc/stat
单位 百分比 %
核心公式 (总使用时间 - 空闲时间) / 总时间 × 100%
采样方法 两次读取差值法
多核支持 可单独统计每个核心
工具实现 top/htop/mpstat 等均基于此机制

如果你是在写监控程序或者想理解监控系统的 CPU 指标,掌握这些内容就足够了。

如需我提供一个完整的 Python 获取 CPU 使用率的脚本,请告诉我 😄

未经允许不得转载:CLOUD技术博 » 服务器cpu使用率计算规则?