堆内存溢出定位方法
最近做的稳定性测试,大概跑了2小时左右LR前端报请求超时、HTTP状态码为500错误,日志报java.lang.OutOfMemoryError:Java heap space错误,明显是堆内存溢出问题。
内存溢出原因:老年代满了就会自动触发fullgc进行垃圾回收,但是如果老年代里的对象回收不掉的话,如果此时有从年轻代过来的对象,但老年代没有足够的空间放这些对象的话,就会产生内存溢出。
定位方法:用JDK自带的命令jmap -histo pid去查看堆内存的使用情况
会看到实例被调用的次数,从大到小排序,越排前面说明占内存空间越大
发现排名第一的就是自己应用程序里所调用的方法,此时只需要在代码里找到该方法,发现该方法使用之后没有及时被释放导致的内存溢出,并交由开发修改即可。