【JVM调错】由于GC导致生产环境高CPU错误
在2020年3月时候突然接到用户反映产品很卡。
作为一个开发兼运维(临时接管)的好处就凸显出来了,上来就干。
- 首先查看内存和CPU
发现CPU问题:
在这里插入图片描述
2.拉取 25376 的 stack 信息【保存状态】
3、通过 top -Hp 命令
发现有如下线程占用较高cpu
4、根据线程占用率榜对应 栈信息发现:
1)占用39.2%以上的线程号为 25378~25391(转换为16进制为:0x6322-0x632f) 共14个线程,发现14个线程都在ParallelGC
2)查看GC信息确实爆炸
其中Eden 区,和 serviver 0区,老年区内存使用几乎100%。
5、可能存在内存泄漏问题:由于卡到无法使用只有重启 于是保存了 堆文件,和本地正常运行堆文件比较【没有冗余部署,而且卡到无法使用,别说生产环境能随便重启:涉及到项目特殊性,保密具体状况】
1)、
问题极有可能存在如下几个类中。
2)点开String类发现实例为如下
发现都是一些人员信息注意到第一步的图片,可以暂时推断问题的原因,再继续分析时没有这部分的代码。提交禅道等回复。
后来证实推断合理。得到了部门大佬的肯定,这时候感觉干到晚上1点半都是值得的。