前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM调优之Java进程消耗CPU过高

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

作者头像
翎野君
发布2023-05-12 19:42:12
5590
发布2023-05-12 19:42:12
举报
文章被收录于专栏:翎野君翎野君

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

看下边的图👇

新生代是使用率正常

总使用率只有41%

而黄颜色的老生代!!

观察他的使用率居然达到

100%

看看它的空间只有

0.0625MB=64KB

问题找到了!

老生代设置的空间太小导致

一旦这个区被填满之后就会出发FullGC,频繁的GC会影响其他线程的正常调度,会出现“一卡一卡”的现象,这也是CPU使用率居高不下的原因。

更改进程启动参数,将此区域空间调大后问题得到解决。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.查看cpu使用率,发现有线程cpu占用率很高
  • 2.查询pid对应的进程
  • 3.查找对应进程中的线程使用cpu的情况
  • 4.根据线程号查看是哪个线程频繁占用CPU
  • 5.查看进程对应的JVM内存使用情况
  • 6.查看进程对应的JVM的配置情况
  • 问题找到了!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档