记一次java程序导致CPU过高处理记录

本文介绍了一次K8s环境中Java应用启动后CPU占用率过高的故障排查过程。通过使用top命令和jstack工具定位到问题线程为JVM GC,并进一步分析堆转存文件,发现是由于配置数据缓存过大导致频繁Full GC,最终通过调整JVM内存设置解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本次的事故是程序部署在k8s,程序启动后就报cpu占用率过高,重启后也一样

  1. 首先使用top命令查看CPU占用高的java程序pid

  1. 使用jdk自带的工具,执行命令 jstack [pid] > temp.txt 将进程的线程信息放入 temp.txt文件中

  1. 再次筛查,使用命令 top -p [pid] -H 查看这个程序中各pid运行情况,找到占用cpu过高 pid

  1. 使用命令 printf 0x%x [pid] 转成16进制,然后使用16进制的值在temp.txt文件中搜索,看这个线程在干嘛

  1. 我本次的问题是,这个线程负责的是jvm gc的

  1. 排查gc日志,可以看到存在高频率的full gc

  1. 开始分析堆转存文件,查看哪块地方占用内存过多,结果发现是运行时动态配置数据缓存较大,程序启动时配置的jvm内容太小,导致无法存入配置数据,不停的触发full gc

  1. 最终将jvm内存调大后,监测一段时间的gc日志,结果是gc日志正常了,cpu占用率也降下来了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值