【操作系统】CPU平均负载和使用率

CPU负载与使用率解析
本文解析了CPU平均负载的概念,包括可运行状态和不可中断状态的进程,并介绍了如何通过uptime命令查看平均负载。同时,文章对比了CPU使用率与平均负载的区别,详细解释了它们在CPU密集型和I/O密集型进程中的表现。
1.CPU的平均负载

(1)什么是CPU的平均负载

单位时间内系统处于【可运行状态】和【不可中断状态】的平均进程数,就是平均活跃进程数,和CPU使用率并没有直接关系

  • 可运行状态
    • 正在使用CPU或者正在等待CPU的进程
    • 用 ps aux命令看到的处于R状态(Running 或 Runnable)的进程
  • 不可中断状态
    • 正处于内核态关键流程中的进程,且流程不可以打断的。
    • 比如等待硬件设备的I/O响应,为例保证数据的一致性,进程向磁盘读写数据时,在得到磁盘响应前是不能被其他进程或者中断打断的。
    • ps aux命令看到的处于D状态的进程 Uninterruptible Sleep

(2)PS中常见STAT状态

在这里插入图片描述

PS中常见STAT状态描述
D无法中断的休眠状态(通常IO进程)
R正在运行,或者在队列中等待运行的进程
S处于休眠状态
T停止或被追踪
Z僵尸进程
<优先级高的进程
n优先级低的进程
L有些页被锁的进程
s进程的领导者(在它之下有子进程)
l多进程的(使用CLONE_THREAD,类似 NPTL pthreads)
+位于后台的进程组

(3)如何查看平均负载 uptime 命令

  • load average后的3个数字就分别代表着1分钟,5分钟,15分钟的CPU平均负载
    • 查看服务器总的逻辑CPU个数:cat /proc/cpinfo | grep “processor” | wc -l
  • 如果平均负载为2,那在2个CPU核数时则刚好利用,如果4个CPU核数,则有50%的空闲

在这里插入图片描述

分析:

  • 1,5,15分钟的数值相差不大,说明负载很平稳

  • 如果1分钟的值远小于15分钟的值,说明系统最近1分钟的负载在降低,而过去15分钟却有很大的负载

  • 如果1分钟的值远大于15分钟的值,最近1分钟的负载在增加,平均负载接近或超过了CPU的个数,意味着系统正在发生过载问题,持续的长时间则说明了出现问题需要优化

  • 在一个单核CPU 系统平均负载为 1.80,0.90,5.48

    • 在过去 1 分钟内,系统有 80% 的超载,而在 15 分钟内,有 448% 的超载,从整体趋势来看,系统的负载在降低
  • 常规推荐CPU平均负载等于CPU核数即可,也看业务场景和历史趋势,判断变化方向

2.CPU的使用率

(1)什么是CPU的使用率

CPU非空闲态运行的时间占比,反馈CPU的繁忙程度,和平均负载不一定完全一致,生产环境的CPU总使用率不要超过70%~80%

(2)Linux的top命令查看CPU使用率

在这里插入图片描述

  • us(user):CPU在用户态运行的时间百分比,通常用户态 CPU 高表示有应用程序比较繁忙,值高则cpu使用率高

  • sy(sys):CPU 在内核态运行的时间百分比(不包括中断),内核态 CPU 越低越不忙,值高则cpu使用率高

  • id(idle):CPU 处于空闲态的时间占比,CPU 会执行一个特定的虚拟进程,名为 System Idle Process,值高的话,则说明CPU比较空闲

  • wa(iowait):CPU 在等待 I/O 操作完成所消耗的时间,该指标越低越好,高表示可能 I/O 存在瓶颈,用 iostat 命令进一步分析

  • hi(hardirq):CPU 处理硬中断所花费的时间,由外设硬件(如键盘控制器、硬件传感器等)发出的中断信号,快速执行

  • si(softirq): CPU 处理软中断所花费的时间,由软件程序(如网络收发、定时调度等)发出的中断信号,延迟执行

  • st(steal): CPU 被其他虚拟机占用的时间,仅出现在多虚拟机场景,指标过高的话,检查下宿主机或其他虚拟机是否异常

(3)CPU使用率和平均负载区别

【CPU平均负载】指单位时间内活跃的进程数,包括正在使用CPU进程,还包括等待CPU和等待I/O的进程,【可运行状态】和【不可中断状态】的平均进程数

【CPU使用率】是单位时间内CPU繁忙情况的统计

(4)区别说明

  • CPU密集型进程,使用大量CPU运算,会导致平均负载升高,这个场景这两者是一致的。

  • I/O密集型进程,等待I/O也会导致平均负载升高,但CPU使用率不一定很高

    • CPU的效率要远高于磁盘,磁盘读写请求过多就会导致大量的I/O等待
    • 进程在 CPU 上访问磁盘文件,CPU 会向内核发起调用文件的请求,让内核去磁盘取文件,这个时候CPU会切换到其他进程或者空闲
    • 任务会转换为 不可中断睡眠状态,当这种读写请求过多会导致不可中断睡眠状态的进程过多,导致CPU负载高,利用率低的情况
  • 大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高

  • CPU密集型应用也叫计算密集型,表示该任务需要大量的运算,没有阻塞CPU一直全速运行,对视频进行高清解码、机器学习和深度学习的模型训练等

  • IO密集型应用 程序需要大量I/O操作,大部分的时间是CPU在等IO (硬盘/内存) 的读写操作,CPU使用率低,但等待IO 也会导致平均负载升高,例如:数据库交互,文件上传下载,网络数据传输

I/O操作,大部分的时间是CPU在等IO (硬盘/内存) 的读写操作,CPU使用率低,但等待IO 也会导致平均负载升高,例如:数据库交互,文件上传下载,网络数据传输

### 查看Linux系统中CPU负载使用率的常用方法 在Linux系统中,有多种命令可以帮助用户查看CPU负载使用率。这些工具各有特点,适用于不同的场景。 #### 1. `uptime` 命令 `uptime` 是一个简单的命令,用于显示系统的运行时间平均负载情况。它会返回过去1分钟5分钟以及15分钟内的平均负载值[^1]。 ```bash uptime ``` #### 2. `w` 命令 除了提供系统的运行时间外,`w` 还能展示当前登录用户的活动状态以及系统的平均负载信息。它的输出包括最近1分钟5分钟15分钟平均负载数据[^2]。 ```bash w ``` #### 3. `top` 命令 `top` 是一个功能强大的实时监控工具,它可以动态地显示各个进程的资源占用情况,其中包括CPU使用率的信息。尽管此命令非常有用,但它本身也会消耗一定的系统资源,在高负载情况下可能不建议频繁使用。 ```bash top ``` #### 4. `vmstat` 命令 `vmstat` 可以报告关于虚拟内存、处理器活动其他性能指标的数据。通过指定间隔秒数来持续观察变化趋势。例如每两秒钟刷新一次并连续采集三次记录: ```bash vmstat 2 3 ``` 这有助于了解一段时间内CPU的状态变化[^4]。 #### 5. `/proc/loadavg` 文件读取 可以直接从文件系统获取最新的负载均值信息而无需依赖额外软件包安装。这种方法效率较高且不会增加太多开销。下面是如何解析该路径下内容的一个例子: ```bash cat /proc/loadavg ``` 以上操作将直接打印出类似于`uptime`所提供的三个时间段上的加权平均负荷数值。 #### 6. `mpstat` 工具 (需安装sysstat) 对于更详细的多核处理单元分析,则推荐利用专门设计用来统计各单独核心表现状况的应用程序—`mpstat` 。要实现这一目的首先得确认已预装好相应套件;之后便可通过如下指令获得详尽的结果集: ```bash sudo apt-get install sysstat # 如果尚未安装的话先完成部署过程 mpstat -P ALL # 显示每一个物理逻辑cpu的具体工作百分比分布详情 ``` #### 排查CPU过高问题 当遇到CPU使用率达到极限的情况时,可以通过组合运用上述提到的一些手段来进行诊断。比如借助于`top`快速锁定嫌疑目标进程ID号后再进一步深入研究其背后原因所在之处等等[^3]。 ### 结论 综上所述,针对不同需求可以选择合适的方案去监测Linux服务器内部运转情形下的中央处理器健康度指数水平。无论是简易型还是高级别的解决方案都能满足日常运维工作中所面临挑战的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网小阿祥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值