JVM调优之Java进程消耗CPU过高

2023-03-02,,

<!--
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 13.0px 'Helvetica Neue'; color: #000000; -webkit-text-stroke: #000000}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px 'PingFang SC Semibold'; color: #000000; -webkit-text-stroke: #000000}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px 'PingFang SC'; color: #000000; -webkit-text-stroke: #000000}
p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px 'Helvetica Neue'; color: #000000; -webkit-text-stroke: #000000}
p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px 'Helvetica Neue'; color: #000000; -webkit-text-stroke: #000000; min-height: 15.0px}
p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px 'Helvetica Neue'; color: #000000; -webkit-text-stroke: #000000; min-height: 16.0px}
span.s1 {font-kerning: none}
span.s2 {font: 13.0px 'PingFang SC'; font-kerning: none}
span.s3 {font: 13.0px 'Helvetica Neue'; font-kerning: none}
span.s4 {text-decoration: underline ; font-kerning: none}
span.s5 {font: 13.0px 'Helvetica Neue'; text-decoration: underline ; font-kerning: none}
span.s6 {font: 13.0px 'Apple Color Emoji'; font-kerning: none}
-->

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

看下边的图

JVM调优之Java进程消耗CPU过高的相关教程结束。

《JVM调优之Java进程消耗CPU过高.doc》

下载本文的Word格式文档,以方便收藏与打印。