JVM调优之Java进程消耗CPU过高
查找问题思路
1.查看cpu使用率,发现有线程cpu占用率很高
tops
咱们拿18092线程举例示范
2.查询pid对应的进程
ps -ef|grep 18092|grep -v grep
3.查找对应进程中的线程使用cpu的情况
top -Hp 18092
发现18097线程占用CPU时间最长
4.根据线程号查看是哪个线程频繁占用CPU
将线程号转化为十六进制的形式
printf "%x\n" 18097
在堆栈信息中查找线程ID对应的信息
jstack 18092|grep 46b1
发现46b1对应的线程为Parallel GC Threads,这个就是JVM下的GC线程,它在频繁的进行垃圾回收。
5.查看进程对应的JVM内存使用情况
jstat -gc 18092 3000
利用上面的命令输出18092进程对应的GC情况,每隔3S采样一次
黄颜色为堆区中Young区GC次数,可观测到一直为68,没有增长。
而红颜色为Old区对应的Full GC的次数,可观测到一直处于增长状态。
一直在FullGC?Old区内存配置的太小了?
6.查看进程对应的JVM的配置情况
jmap -heap 18092
看下边的图