美文网首页
从CPU/内存/IO三个方面来分析Linux性能下降

从CPU/内存/IO三个方面来分析Linux性能下降

作者: robot_test_boy | 来源:发表于2022-08-07 00:06 被阅读0次

    转载自华为服务支持的Linux性能下降

    性能指标:

    CPU占用率:top,mpstat,sar -w, vmstat

    IO性能:throughput, iops, iostat -x,

    CPU和内存资源占用高,句柄、文件数、Inode节点、异常进程等。

    故障现象

    OS的CPU性能,内存性能或者IO性能明显下降。

    问题可能影响

    用户的业务处理能力下降,无法满足正常业务需求。

    可能原因

    系统平均负载过高。

    CPU使用率过高。

    CPU上下文切换过于频繁。

    CPU缓存命中率较低。

    内存不足导致内存换出换入交换分区频繁。

    硬盘利用率已经饱和,IO存在瓶颈。

    解决措施

    1. 对于任何的性能问题,首要是需要看OS的日志,比如/var/log/messages里面是否有error,fail,warn等信息。查找可能会引发性能问题的错误。千万不要漏掉这一步。

    2. 使用uptime查看系统平均负载,从这个命令的load average可以知道系统最近 1 分钟、5 分钟、15 分钟的系统平均负载。

    系统平均负载指的是处于可运行或不可中断状态的平均进程数,理想状态下,每个逻辑CPU运行一个进程,因此例如当前系统的逻辑CPU数量是64,理想状态load average也应该是64,上图的load average是100,则表示有进程在等待执行。

    3. 由于系统平均负载反映的是处于R状态和D状态的进程数,因此不代表CPU的使用率就是高,这两者没有必然的联系。对于计算密集型任务较多的场景来说,系统平均负载的升高意味着CPU使用率上升,但是对于IO密集型任务较多的场景来说,系统平均负载升高时CPU利用率通常都不高,因为有很多进程都处于D状态。因此:

    3.1) 如果系统平均负载率很高同时CPU的使用率也很高,则需要考虑的是系统可能遇到了CPU瓶颈,需要去定位CPU方面的原因。

    3.2) 如果系统平均负载率很高,但是CPU的使用率不高,则需要考虑的是系统可能遇到了IO瓶颈,需要去定位IO方面的原因;

    4. 对于系统平均负载很高同时CPU使用率也高的场景,我们需要去定位CPU方面的原因。

    4.1) 首先使用下面的命令查看每一秒的CPU的核心的变化信息:

    # mpstat -P ALL 1

    由以上输出可以得出结论,当前系统负载升高,并且其中 1 个核在执行用户态任务,占了49号CPU的100%的时间,此时大多数属于业务工作。所以此时需要查哪个进程导致49号CPU 跑满。

    4.2) 使用pidstat命令去查看进程占用的CPU情况:

    # pidstat -u 1

    由以上输出我们可以看到stress进程占用了很高的CPU。

    5) 对于系统平均负载很高但是CPU使用率不高的场景,我们需要去定位IO方面的原因。

    5.1) 首先使用下面的命令查看每一秒的CPU的核心的变化信息:

    # mpstat -P ALL 1

    可以看到iowait占用比较高

    5.2) 使用sar -d -p 1查看哪个块设备的使用率比较高。

    通过上图可以看到,sda盘的%util占用率较高,基本到了100%,而且await的值也达到了76.28,说明sda设备已经饱和,如果await值较高,则可能是磁盘设备存在问题。

    5.3) 使用pidstat -d 1命令查看具体是哪个进程导致IO升高的:

    通过上图可以看出stress-ng-hdd进程是导致IO升高的元凶。

    6. 对于由于CPU上下文切换频繁导致系统平均负载升高的,可以按照下面的方法去排查:

    一般每次上下文切换都需要几十纳秒到数微秒的 CPU 时间,如果切换较多还是很容易导致 CPU 时间的浪费在寄存器、内核栈以及虚拟内存等资源的保存和恢复上,这里同样会导致系统平均负载升高。

    6.1) 通过下面的命令查看系统上下文切换:

    # vmstat 1

    通过上图我们可以看到,cs和in剧增,同时us+sy的CPU占用超过了90%,r就绪队列的长度达到了16个左右,而当前的CPU个数是4,因此可以判断当前存在CPU队列已经很长,从而导致进程上下文切换较为频繁。

    使用pidstat查看具体的进程上下文切换信息,以判断是哪个。

    # pidstat -u 1 -w -t

    从上图可以看出,大量的sysbench线程存在频繁的上下文切换。并且nvcswch/s的值比cswch/s的值大的多,说明大部分sysbench进程都在被强制调度,也就是在争抢CPU资源,说明CPU成为了性能瓶颈。

    7. 对于内存不足引起的OS性能下降的问题,我们可以通过下面的方法去排查:

    7.1) 首先查看dmesg日志,查看是否有Out of memory打印,如果有,说明有程序在申请内存时失败,内存不足,这种情况有可能由两种原因引起。一是物理内存不足,二是内存碎片化严重,导致后面的程序申请大片连续内存时无法分配成功。

    7.2) 通过sar -r 1命令去查看当前的内存的使用率,主要看%memused,如果使用率超过了90%,说明物理内存已经不足。

    7.3) 通过sar -W 1命令查看交换分区的活动,如果pswpin/s和pswpout/s的值比较高,说明物理内存已经不足,正常这个值是0。

    7.4) 通过vmstat -a命令中的swpd查看交换分区使用的大小,以此进一步判断物理内存是否已经不足。

    7.5) 通过pidstat -r 1命令查看%MEM域,查看哪些进程占用的内存过多。

    相关文章

      网友评论

          本文标题:从CPU/内存/IO三个方面来分析Linux性能下降

          本文链接:https://www.haomeiwen.com/subject/wcbdwrtx.html