1. 发现问题:
劳动节回来发现生产环境宕机。
2. 问题排查:
1.登陆linux,使用命令 top,发现 pid: 19693 的cpu和内存占用率很高(贴图已经是问题解决后,这里用来凑数)且迟迟没有下降的意思。
2.使用命令 jps,发现 pid: 19693 为订单服务
3.使用命令 jmap -heap 19693,发现箭头位置内存占用全都为99.9%(贴图已经是问题解决后,这里用来凑数)
4.问题已经找到了,是订单服务的内存爆满,jvm频繁gc导致cpu占用率高从而导致服务器宕机
3. 问题解决:
1.使用命令 jmap -histo:live 19693,拉到最上面看占用内存最多的对象是什么类(贴图已经是问题解决后,红标位置是问题前占用最多的两个,每个大概占了600m)
2.找到占用最多的类后,发现是mq处理消息的代码有问题,每次处理消息都会创建一个mqClient实例,使用单例生成mqClient后问题解决。至于mqClient实例为什么没有被gc回收掉的问题,有待后续研究。
粗略计算 5天40万条消息,创建了40万个mqClient