【JVM调错】由于GC导致生产环境高CPU错误

在2020年3月时候突然接到用户反映产品很卡。
作为一个开发兼运维(临时接管)的好处就凸显出来了,上来就干。

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

后来证实推断合理。得到了部门大佬的肯定,这时候感觉干到晚上1点半都是值得的。

你可能感兴趣的:(java)