记一次测试服务器java内存溢出问题(已解决,但未找到根本原因)

  • Post author:
  • Post category:java


最近一个项目发到测试服务器上后,分配了Xmx2048m,但是隔了一晚永久代都满了,肯定是有内存泄露。

就开始使用常用的方式开始查找问题

命令: jmap -heap PID 可查看java堆内存中的存储状态,如下图:

命令: jstat -gcutil 可查看垃圾回收状态,如下图:

虽然当时发现,确实在频繁执行内存回收,但不知道原因;

最开始发现CPU占用很高,

然后先用ps -mp 【替换为进程ID PID】 -o THREAD,tid,time

或者 top -Hp 找到cpu占用高的线程

使用 jstack 【进程ID PID】 | grep 【线程ID十六进制】 -A 10 -B 10 命令可查看线程情况,

最后发现都是垃圾回收的线程。

最后还是用  jmap -dump:format=b,live,file=aa.bin 1355384 把内存映射文件下载下来了,然后用jvisualvm导入查看情况,发现了大量的nacos的线程。此时应该知道是nacos的问题。

为了确认还是将dump文件上传到了heapHero上进行分析:

最后看到有一个对象占了 90%的内存,最后还是定位到nacos的问题;

然后检查发现代码中用的nacos client是2.0.4的,nacos server是2.0.3的,然后把client也换乘了2.0.3,目前跑了一晚没有问题。但是由于时间问题没来得及分析源码哪里导致的问题,后续有时间了再看吧。。。。。



版权声明:本文为u010737670原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。