今天谈下CPU中两个重要的指标:平均负载和使用率。
1、CPU常见指标说明
我们先看一下常用的CPU指标有哪些,可以快速的了解到CPU的使用情况。top命令可以查看CPU的指标信息如下:
top - 20:12:00 up 70 days, 3:49, 1 user, load average: 0.10, 0.18, 0.14
Tasks: 2229 total, 1 running, 332 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 52468537+total, 47777491+free, 36061900 used, 10848532 buff/cache
KiB Swap: 31250428 total, 31250428 free, 0 used. 48045312+avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29973 root 20 0 42728 5972 3136 R 0.7 0.0 0:00.16 top
9 root 20 0 0 0 0 I 0.3 0.0 43:13.52 rcu_sched
22809 root 20 0 1024352 88780 19280 S 0.3 0.0 56:53.22 zk_proxy
第一行和第二行
load average:1分钟、5分钟、15分钟平均负载信息
Tasks:任务数量,就是总的进程数
running:正在运行的进程数
sleeping:睡眠状态的进程数
stopped:停止状态进程数
zombie:僵尸进程数量
第三行us:用户空间程序CPU使用率
sy:内核空间CPU使用率
id:CPU空闲率
wa:等待I/O的CPU时间
hi:硬件中断CPU占用率
si:软件中断CPU占用率
最下面一行PID:进程ID
PR:进程执行的优先级
%CPU:CPU使用率
可以通过ps aux查看单个进程的进程ID、内存使用率、cpu使用率、状态等指标信息。
root@node:~# ps aux|head -n10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 38604 6648 ? Ss Sep17 5:05 /sbin/init nopti
root 2 0.0 0.0 0 0 ? S Sep17 0:09 [kthreadd]
root 7 0.0 0.0 0 0 ? I< Sep17 0:00 [mm_percpu_wq]
root 8 0.0 0.0 0 0 ? S Sep17 1:14 [ksoftirqd/0]
root 9 0.0 0.0 0 0 ? I Sep17 43:14 [rcu_sched]
root 10 0.0 0.0 0 0 ? I Sep17 0:00 [rcu_bh]
root 11 0.0 0.0 0 0 ? S Sep17 0:00 [migration/0]
root 12 0.0 0.0 0 0 ? S Sep17 0:09 [watchdog/0]
root 13 0.0 0.0 0 0 ? S Sep17 0:00 [cpuhp/0]
其中进程常见状态有:
R:运行中(占用 CPU)或就绪(等待 CPU 调度)
S:可中断,等待资源或者信息,被唤醒
D:不可中断,例如等在读写数据
T:暂停状态
Z:僵尸进程
I:多线程进程
<:高优先级别进程,可以组合成S<、I<等
+:前台进程组,可组合R+等
2、CPU平均负载
我们通常使用uptime来快速查看系统负载信息。
root@node:~# uptime
21:58:50 up 321 days, 12:10, 1 user, load average: 4.25, 4.98, 4.73
几个指标含义:
21:58:50 #当前系统时间
321 days #系统运行时间
1 user #当前登录用户
load average: 4.25, 4.98, 4.73 #1分钟、5分钟、15分钟负载
根据uptime给出的load average定义,平均负债是指单位时间内处于可运行状态(runnable)或不可中断状态(uninterruptable)的进程平均数量。
可运行状态是指ps查看的R状态进程,也就是正在使用CPU或者等待使用CPU的进程。
不可中断状态是指进程正处于内核执行中,且等待设备响应,不可中断否则可能丢失数据。
我们前面文章谈到过,一个cpu同一时间只能处理一个进程,这里的负载数据一般跟cpu数量有比较大的关系,单位时间一旦进程数量超过核数,就会出现竞争cpu的情况,导致负载快速升高。
平均负载一般要取1分钟、5分钟、15分钟等维度,主要反映负载的变化趋势,例如当1分钟很高时,5分钟和15分钟较低,表明负载趋势可能正在恶化。相反1分钟较低,而5分钟较高,表明负载正在降低。
3、CPU使用率
CPU使用率跟平均负载一定要区分开,它们两者有关系但没有强联系,不是说负载高了,使用率一定就高。
CPU使用率一般是指单位时间内CPU的使用占比,也就是繁忙程度。
我们可以从前面的top和ps命令查看系统整体CPU使用率和进程的使用率,同时我们还可以使用mpstat实时查看每个CPU的使用情况。
# -P ALL 表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据
root@node:~# mpstat -P ALL 5
Linux 4.15.0-58-generic (cs1ahyper01n07) 12/04/2025 _x86_64_ (64 CPU)
10:41:46 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
10:41:51 PM all 1.10 0.00 1.82 0.01 0.00 0.40 0.00 0.93 0.00 95.74
10:41:51 PM 0 0.49 0.00 1.78 0.00 0.00 20.06 0.00 0.00 0.00 77.67
10:41:51 PM 1 0.20 0.00 0.20 0.00 0.00 0.60 0.00 0.00 0.00 99.00
10:41:51 PM 2 0.20 0.00 2.01 0.00 0.00 0.00 0.00 0.00 0.00 97.79
10:41:51 PM 3 0.40 0.00 1.41 0.00 0.00 0.00 0.00 0.20 0.00 97.99
10:41:51 PM 4 0.40 0.00 0.40 0.00 0.00 0.00 0.00 0.40 0.00 98.80
10:41:51 PM 5 0.40 0.00 0.20 0.00 0.00 0.00 0.00 0.20 0.00 99.20
10:41:51 PM 6 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.80
10:41:51 PM 7 0.40 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 99.19
这里几个重要指标:
CPU:CPU核心,all是整体数据
%usr:用户态进程占用 CPU 的时间占比,大部分是应用程序
%sys:内核态进程占用 CPU 的时间占比,内核操作
%iowait:CPU 等待 I/O 操作的占比,与前面说的不可中断进程有很大关系。
%idle,CPU空闲使用率
我们在对比平均负载和CPU使用率时,可以从几个维度来看。
- 大量进程的应用,导致CPU被大量占用,负载和使用率都会升高。
- 如果应用有大量I/O操作,导致不可中断进程增加,负载会升高,CPU使用率不一定很高。这时候应该重点关注%iowait指标。