java内存泄露场景---Javaheapspace
原因:长生命周期的对象引用了短生命周期(应该尽快GC回收掉)的对象,最后造成一个对象已经不能在堆区分配足够空间。注:这种现象不能完全肯定是内存泄露,比如:heap本身的设置的过小。
案例:我个人没有遇到过这种案例,但模拟过这种情形的Demo:参考我的《深入浅出JProfiler》文章,也学习过其他同学的案例:例如:参数过大并且频繁超时导致内存泄露
解决方案:
触发FullGC,dumpliveheap。标记堆中对象数量,重点关注可疑对象
触发FullGC,dumpliveheap。标记堆中对象数量,重点关注可疑对象
对比步骤1和步骤2相同对象的数量和大小,找出可疑对象一一进行排查确认。
如果步骤3依然无法明确有问题的对象,那就多执行几次步骤1和步骤2。在此过程中可以调整GC触发时间,模拟真实的故障场景:)
看看GC后堆的大小是否增长,如果没有不断增长,并且持续一段较长时间,那基本正常(具体看看深入浅出JProfiler文章中的实践章节)。
注:Java内存泄露的场景还有很多(可以参考下官方的一些文档javamemleaks),有机会后面会继续补充。 2/2 首页 上一页 1 2 |