[JVM]线上CPU负载持续飙高的问题解决
1. 周二新需求提测之后,运行到晚上,收到告警短信,生产环境CPU负载过高,先解决问题再排查,运维扩容,有问题机器下线重启上线,CPU使用率正常,服务正常响应。
2. 开始排查问题,把预留的一台有问题的机器用于排查问题,
第一步,top 命令查看cpu资源使用情况,jps -lm找到对应java进程号9021之后,top -H -p9021 看到线程占用情况,cpu利用率93%
记录使用率高的具体的线程id: 9023,9024,9027,9029 在linux中,线程就是轻量级进程
第二步,通过jstack 查看线程堆栈信息,jstack 9021 > jstack_9021.txt , 然后把十进制的9023,9024,9027,9029转成十六进制(0x233f,0x2340, 0x2343, 0x2345)
最后,通过 cat jstack_9021.txt | grep -C 20 0x233f 命令找到了具体的线程信息, 发现把cpu打满的是GC 线程,然后jmap 先总体看内存使用状况,Xmx配置挺高,不存在内存不够,
第三步,通过 jstat -gcutil 9021 3000 20 查看GC回收情况,每间隔3000ms打印一次,打印20次,发现Eden区和Old区都耗尽了,FullGc非常慢,耗时很长,基本可以确定发生了内存泄漏。
jmap -histo 9021 打印内存占用情况,发现主要是新引入第三方RSA包里SignContent对象很大,因为这个对象包含了图片的Base64 decode字节和PDF文件的Base64编码字节。放在集合里,请求结束没有释放导致的。
因为相信,所以看见.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)