Linux性能调优:理解CPU中的平均负载和使用率

今天谈下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指标。
相关推荐
Chennnng6 小时前
Ubuntu 安装过程的 6 大常见问题类型
linux·运维·ubuntu
阿干tkl6 小时前
传统网络与NetworkManager对比
linux·网络
Evan芙7 小时前
Linux 进程状态与进程管理命令
linux·运维·服务器
doris6107 小时前
2025年设备管理系统:智能运维成新标杆
运维
qsjming7 小时前
EXT4文件系统特性说明
运维
码农12138号7 小时前
Bugku HackINI 2022 Whois 详解
linux·web安全·ctf·命令执行·bugku·换行符
Joren的学习记录8 小时前
【Linux运维进阶知识】Nginx负载均衡
linux·运维·nginx
用户2190326527358 小时前
Java后端必须的Docker 部署 Redis 集群完整指南
linux·后端
胡先生不姓胡8 小时前
如何获取跨系统调用的函数调用栈
linux