如何通过时间片差值公式实时监测进程CPU使用率?

2026-04-30 19:480阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计860个文字,预计阅读时间需要4分钟。

如何通过时间片差值公式实时监测进程CPU使用率?

由于这两个值是进程累积消耗的用户态/内核态时钟周期(单位是CLK_TCK,通常为+100),而不是百分比。要将其转换为CPU利用率,需要计算时间窗口内的差值,并将其归一化到系统总可用时间片上。跳过这一步直接相减会忽略采样间隔,导致结果严重失真——在多核处理器上,100%可能被错误地计算为400%。

核心公式:两步差值 + 归一化

真实 CPU 使用率 = (Δutime + Δstime) / (Δtotal_jiffies * num_cpus) × 100%

  • ΔutimeΔstime:两次采样间 /proc/[pid]/stat 第 14、15 字段的差值
  • Δtotal_jiffies:两次采样时间间隔(秒)× sysconf(_SC_CLK_TCK),即该时间段内系统理论上可分配的最大时间片数
  • num_cpus:用 sysconf(_SC_NPROCESSORS_ONLN) 获取在线 CPU 核心数,不能硬编码为 1 或 4

注意:/proc/[pid]/stat 中第 22 字段 cutime/cstime 是子进程数据,实时监控单进程时不要混入。

代码里怎么安全读取并解析 /proc/[pid]/stat

字段数量不固定(因命令行参数含空格),不能靠 sscanf 简单按位置取。

阅读全文
标签:C

本文共计860个文字,预计阅读时间需要4分钟。

如何通过时间片差值公式实时监测进程CPU使用率?

由于这两个值是进程累积消耗的用户态/内核态时钟周期(单位是CLK_TCK,通常为+100),而不是百分比。要将其转换为CPU利用率,需要计算时间窗口内的差值,并将其归一化到系统总可用时间片上。跳过这一步直接相减会忽略采样间隔,导致结果严重失真——在多核处理器上,100%可能被错误地计算为400%。

核心公式:两步差值 + 归一化

真实 CPU 使用率 = (Δutime + Δstime) / (Δtotal_jiffies * num_cpus) × 100%

  • ΔutimeΔstime:两次采样间 /proc/[pid]/stat 第 14、15 字段的差值
  • Δtotal_jiffies:两次采样时间间隔(秒)× sysconf(_SC_CLK_TCK),即该时间段内系统理论上可分配的最大时间片数
  • num_cpus:用 sysconf(_SC_NPROCESSORS_ONLN) 获取在线 CPU 核心数,不能硬编码为 1 或 4

注意:/proc/[pid]/stat 中第 22 字段 cutime/cstime 是子进程数据,实时监控单进程时不要混入。

代码里怎么安全读取并解析 /proc/[pid]/stat

字段数量不固定(因命令行参数含空格),不能靠 sscanf 简单按位置取。

阅读全文
标签:C