jvm调优-cpu飙升及响应慢

cpu飙升及响应慢点原因

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

解决思路

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

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

方案一

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

jvm调优-cpu飙升及响应慢_第1张图片

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

jvm调优-cpu飙升及响应慢_第2张图片

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

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

jvm调优-cpu飙升及响应慢_第3张图片

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

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

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

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过高、死锁、内存泄漏的解决思路

你可能感兴趣的:(java虚拟机,jvm,java,linux)