Java web应用性能分析之【思考一个问题:%CPU低,Load avg>5,会出现这种情况吗,要命吗,是否要关注?】

发布于:2024-04-24 ⋅ 阅读:(23) ⋅ 点赞:(0)

Java web应用性能分析之【CPU飙高分析之MySQL】-CSDN博客

Java web应用性能分析之【Linux服务器性能监控分析概叙】-CSDN博客

Java web应用性能分析概叙-CSDN博客

Java web应用性能分析之【基准测试】-CSDN博客

Java web应用性能分析之【sysbench基准测试】-CSDN博客

Java web应用性能分析之【CPU飙升分析概述】-CSDN博客

 CPU飙高的指标
        一般情况下,我们服务器的都比较空闲,因为cpu一般不是性能瓶颈。偶尔有进程的%cpu>100%,也是正常情况。毕竟是在多核cpu服务器上,进程里面起了多线程,%cpu>100%很正常。说明进程对CPU多核利用很充分。

        我们一般说cpu飙高,并不只是%CPU这一个参考值。上面“性能分析概叙”中有讲我们关注的点是下面这些,而且这些指标都是相互关联的,并不是某一项很高就说明有问题:

        cup利用率[us <70%,sy<35%,id>=95% ]
        cs每秒上下文切换次数,越小越好[cs<100];
                     cs和cpu利用率相关,如果能保持上面所说的利用率大量的切换可以接受

        %iowait <= 100/cpu核心 %,等待 io 的 cpu 时间占比,这个值将在磁盘监控中再讲。
        load avg运行队列/平均负载 [ load avg/cpu核心数 < 5]  (平均负载高有可能是cpu密集型任务)


思考一个问题:%CPU低,Load avg>5,会出现这种情况吗,要命吗,是否要关注?

        直接说结果,需要关注、这种情况也要命。在文件服务器、数据库服务器上可能出现这种情况:CPU低、Load高的问题,即系统的负载很高,但实际上CPU的使用率却很低。这可能是因为等待磁盘I/O完成的进程过多,导致进程队列长度过大,而实际上CPU运行的进程很少。

        如果不加以关注和处理,最终会导致整个应用卡顿。下面将介绍几种可能出现这种情况的场景,并给出相应的处理办法:

场景一:磁盘读写请求过多导致的问题

        当系统中磁盘读写请求过多时,CPU可能会被空闲等待磁盘I/O完成的进程所占用,从而导致CPU低、Load高的情况。这种情况下,我们可以通过查看CPU等待IO时间的命令(如top命令中的%wa),来判断磁盘读写请求是否过多。

解决方法:

        针对这种情况,我们可以优化磁盘访问的方式,如合并磁盘访问请求、使用更高性能的磁盘设备等。另外,我们也可以优化程序的磁盘访问方式,减少磁盘读写的频率,从而降低磁盘I/O的压力。

场景二:MySQL中存在没有索引的语句或存在死锁等情况

        在MySQL数据库中,如果执行的SQL语句没有合适的索引,或者存在死锁等情况,可能会导致大量的磁盘I/O等待,从而造成CPU低、Load高的问题。

解决方法:

        针对这种情况,我们可以通过检查MySQL数据库的慢查询日志或者执行SHOW  FULL  PROCESSLIST命令来查看是否存在没有索引的语句或者死锁情况。然后,我们可以对这些语句进行优化,添加合适的索引或解决死锁问题,从而减少对磁盘的访问。

场景三:外接硬盘故障

        如果我们的系统挂载了外接硬盘(如NFS共享存储),如果外接硬盘发生故障,可能会导致大量的读写请求无法完成,进而导致CPU低、Load高的情况。

解决方法:

        针对这种情况,我们需要检查外接硬盘的连接和状态,确保其正常工作。如果外接硬盘故障,我们需要及时修复或更换硬盘。

        综上所述,CPU低、Load高的问题通常是由于等待磁盘I/O完成的进程过多所导致的。我们可以通过分析CPU等待IO时间、查看磁盘IO情况、检查MySQL数据库的慢查询日志等方法来定位问题,并采取相应的优化措施来解决问题。

问题定位

        同样是通过top -Hp定位mysql中的线程,然后定位sql,最后结合业务,进行综合分析。

     SQL定位参考 :Java web应用性能分析之【CPU飙高分析之MySQL】-CSDN博客


网站公告

今日签到

点亮在社区的每一天
去签到