解析Linux操作系统中CPU使用率和平均负载

本文介绍了Linux服务器中关于CPU操作的关键概念,如平均负载(活跃进程数)、可运行状态和不可中断状态的区别,以及如何通过uptime和top命令监控CPU使用率。特别强调了I/O密集型应用对CPU和平均负载的影响。
摘要由CSDN通过智能技术生成

        记录一下以前操作Linux服务器时关于CPU操作指令的相关知识点,其实这些在实际生产中很少用到,使用时忘记后翻看回忆一下资料即可,这边记录了常用指令,有助于快速找到对自己有用的内容。

CPU平均负载

      含义

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

  • 可运行状态

    • 正在使用 CPU 或者正在等待 CPU 的进程

    • 用 ps aux命令看到的,处于 R 状态(Running 或 Runnable)的进程

  • 不可中断状态

    • 正处于内核态关键流程中的进程,且流程不可打断的,

    • 比如 等待硬件设备的 I/O 响应,为了保证数据的一致性,进程向磁盘读写数据时,在得到磁盘响应前是不能被其他进程或者中断打断的

    • ps aux命令中 D 状态 的进程 Uninterruptible Sleep

ps aux

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.2 128052  6676 ?        Ss   08:24   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    08:24   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    08:24   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   08:24   0:00 [kworker/0:0H]
root          6  0.0  0.0      0     0 ?        S    08:24   0:00 [kworker/u256:0]
root          7  0.0  0.0      0     0 ?        S    08:24   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    08:24   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        R    08:24   0:01 [rcu_sched]
root         10  0.0  0.0      0     0 ?        S<   08:24   0:00 [lru-add-drain]
root         11  0.0  0.0      0     0 ?        S    08:24   0:00 [watchdog/0]
root         13  0.0  0.0      0     0 ?        S    08:24   0:00 [kdevtmpfs]
PS中常见STAT状态描述
D无法中断的休眠状态(通常 IO 的进程)
R正在运行,或在队列中的进程
S处于休眠状态
T停止或被追踪;
Z僵尸进程
<优先级高的进程
n优先级较低的进程
L有些页被锁进内存
s进程的领导者(在它之下有子进程)
l多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
+位于后台的进程组
 uptime命令查看平均负载
  • load average后的3个数字就分别代表着1分钟,5分钟,15分钟的CPU平均负载

    • 查看服务器总的逻辑cpu个数【cat /proc/cpuinfo| grep "processor"| wc -l】

cat /proc/cpuinfo| grep "processor"| wc -l
1
  • 如果平均负载为2,那在2个CPU核数时则刚好利用,如果是4个CPU核数,则有50%的空闲
uptime
 11:25:10 up  3:00,  1 user,  load average: 0.03, 0.11, 0.15

  

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

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

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

    • 如果在一个单核CPU 系统平均负载为 1.80,0.90,5.48,则表明在过去 1 分钟内,系统有 80% 的超载,而在 15 分钟内,有 448% 的超载,从整体趋势来看,系统的负载在降低

 CPU平均负载合理范围:常规推荐等于cpu核数即可,也看业务场景和历史趋势,

判断变化方向

CPU使用率

含义

CPU 非空闲态运行的时间占比,反映 CPU 的繁忙程度,和平均负载不一定完全一致

生产系统的 CPU 总使用率不要超过 70~80%

  • 比如

    • 单核 CPU 1s 内非空闲态运行时间为 0.8s,那么它的 CPU 使用率就是 80%

    • 双核 CPU 1s 内非空闲态运行时间分别为 0.4s 和 0.6s,总体 CPU 使用率就是 (0.4s + 0.6s) / (1s * 2) = 50%

top查看CPU使用率

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 被其他虚拟机占用的时间,仅出现在多虚拟机场景,指标过高的话,检查下宿主机或其他虚拟机是否异常

top - 12:17:49 up  3:52,  1 user,  load average: 0.03, 0.16, 0.25
Tasks: 118 total,   3 running, 115 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2895412 total,  1044812 free,  1113896 used,   736704 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1553400 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                   
  8105 root      20   0 2480112 454308  16516 S  0.7 15.7   2:00.27 java                                                                                                                                      
  7722 polkitd   20   0 1330320 431564  20960 S  0.3 14.9   2:25.53 mysqld                                                                                                                                    
 15562 root      20   0  162032   2260   1556 R  0.3  0.1   0:00.03 top                                                                                                                                       
     1 root      20   0  128052   6676   4180 S  0.0  0.2   0:01.55 systemd                                                                                                                                   
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd                                                                                                                                  
     3 root      20   0       0      0      0 S  0.0  0.0   0:00.76 ksoftirqd/0                                                                                                                               
     5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H 

两者区别区别

  • 【CPU平均负载】指单位时间内活跃进程数,包括正在使用 CPU 的进程,还包括等待 CPU和 等待 I/O 的进程

    • 【可运行状态】和【不可中断状态】的平均进程数

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

  • 区别说明

    • 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 空闲时,启用其他线程继续使用 CPU,提高 CPU 的使用率

  • 26
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值