主要内容
JVM调优的工具和方法 深入浅出,分如下3节介绍,可以解决实际问题。
本章解决java线上CPU调优
工具介绍
公欲善其事,必先利其器
jps, jstat, jmap, jhat, jstack, jinfo, JConsole, VisualVM, Eclipse Memory Analyzer(MAT)CPU调优
还我CPUMemory调优
吃我的吐出来
更新历史
定位线程
TOP命令查看到CPU的占用情况
TOP –> P : 按CPU使用率排序具体线程
Java是一个多线程应用,进程是由多个线程构成的,上面看到的是这个进程的CPU占用率,导致这个进程CPU偏高的是其中某个或某几个线程,因而我们需要找到这些线程。
ps命令查看指定进程的线程情况1
ps -mp <pid> -o THREAD,tid,time
线程tid为 9100 的线程,CPU占用率达到了99.8%, 就是这个线程的问题。
具体分析
请出 jstack
分析具体线程。
** 注意: 进制转换 **
ps命令查看到的线程ID 9100 是十进制,jstack
命令输出的线程ID可能是十六进制,使用如下命令转换
1 | ╰─$ printf "%x\n" 9100 |
然后使用 jstack
定位具体的问题
1 | ╰─$ jstack 9078|grep 238c -A 15 |
最后结合源码检查就ok。