• jvm调优-cpu飙升及响应慢


    cpu飙升及响应慢点原因

    此处只谈软件的原因,至于硬件及病毒不在此处说明。cpu飙升主要涉及到的是系统问题,比如系统过于臃肿,开启过多程序等都会产生CPU使用率过高,而导致系统速度慢,体现在系统吞吐量低,请求响应慢。

    解决思路

    上面提到的吞吐量、响应慢,系统日志中也看不出问题所在,却发现CPU占用率很高,那么此时我们就需要区查看以下运行中的线程有没有异常情况。

    思路:简单说就是先找到CPU飙升的进程,再找到进程中占用CPU资源最多的线程,通过jstack命令打出这个线程的dump文件,找到具体的代码位置。

    方案一

    1、通过top -c 命令可以动态显示进程占用资源排行榜,包括CPU、内存、占用进行ID。关注在 CPU PID COMMAND 的信息,找到进程号PID

    在这里插入图片描述

    2、根据进程号PID,找到对应有哪些线程,通过命令:top -H -p PID,也可以 cd /etc/proc/PID ,看看这个进程属于哪个服务。此处PID = 80972 为例。

    在这里插入图片描述

    • 通过printf “0x%x\n” 81122命令,把对应线程PID转化为16进制。

      printf "0x%x\n" 81122 -> 0x13ce2
      
      • 1
    • 查看当前线程的Dump日志,定位到具体有问题的代码。命令 jstack 80972 | grep -A 20 0x13ce2

    在这里插入图片描述

    根据日志找到对应的业务方法(我们写的项目方法),然后调优方法。

    3、若是不好在线定位问题,可以将dump日志下载到本地。捕获日志过程如下:

       jstack -l 2626 >> test.log   // 2626 是PID,下载到当前目录到日志文件test.log
    
    • 1

    4、运用一下现有工具分析dump日志如:mat 、ProcDump、DebugDiag、ADPlus、WinDbg

    分析工具

    方案二

    方案一主要介绍CPU高、响应慢到一些解决方案,调整后还存在到话此时需要考虑JVM内存调优问题,即是JVM参数调优,可以参考《JVM调优-配置参数》VM调优-配置参数

    总结

    方案一适合前期项目压测环境,后端在后台捕获日志,不需要测试工程师提问题驱动。当然上了生产,遇到一些卡顿、响应慢、CPU高到问题也适用。

    方案二适合在方案一排查之后操作,毕竟JVM默认到一些参数配置已经够大多数项目适用。可以花些时间关注 堆内存、年轻代、老年代身上。

    调优涉及到的命令比较灵活,涉及的有:top 、jstack、ps、jmap、jps、jinfo

    jstack命令讲解:jstack命令讲解
    https://blog.csdn.net/weixin_44692700/article/details/116885373
    https://blog.csdn.net/baidu_28068985/article/details/108176278
    https://blog.csdn.net/javalingyu/article/details/124127697
    cpu过高、死锁、内存泄漏的解决思路

  • 相关阅读:
    DPU网络开发SDK——DPDK(一)
    Day 08 python学习笔记
    vue之@click绑定的函数,如何实现加不加括号都可执行
    刷题记录:牛客NC13947Contest
    初识C++ (五)
    golang之并发编程
    VBA技术资料MF84:判断文件夹是否存在并创建
    (九)通过逻辑处理器串联请求/遍历list结果/foreach控制器
    PHP代码审计3—系统重装漏洞
    cartographer-(0)-ubuntu(20.04)-环境安装
  • 原文地址:https://blog.csdn.net/baidu_28068985/article/details/126480005