Skip to main content

如何查看java内存增长哪些对象

用户问题 :#

如何查看java内存增长哪些对象


专家官方解答 :#

要使用Arthas查看Java内存中哪些对象在增长,可以遵循以下步骤进行分析:

  1. 监控整体内存状态
    首先,使用Arthas的memory命令定期检查JVM的整体内存使用情况。这将帮助你识别内存是否确实在异常增长,以及是堆内存还是非堆内存存在潜在的泄露迹象。关注如heapg1_eden_spaceg1_old_geng1_survivor_space等关键区域的使用率变化,特别是那些持续增长且不减少的部分。

  2. 生成堆转储文件
    当发现内存有异常增长时,使用heapdump命令生成堆的全量内存快照,例如:

[arthas@58205]$ heapdump arthas-output/dump.hprof

多次执行此操作,在不同时间点生成堆转储文件,以便后续对比分析。

  1. 分析堆转储文件
    利用如Eclipse Memory Analyzer (MAT)等工具分析这些堆转储文件。比较不同时间点的堆转储差异,寻找那些内存占用显著增加的对象类型和具体对象。重点关注对象的引用链,以确定哪些对象持有这些增长对象的引用,从而追踪到内存泄露的源头。

  2. 定位增长对象
    在MAT中,可以使用“Leak Suspects”报告或者手动分析来定位增长最快或占用内存最多的对象集。重点关注这些对象的生命周期管理,检查是否有未预期的长时间持有、未清理的集合、静态引用等问题。

  3. 代码审查与修复
    根据分析结果,回溯到代码中相应部分,审查并修正导致内存泄露的逻辑。可能需要优化对象的创建与销毁策略,确保不再有不必要的对象保留,或及时释放不再使用的资源。

综上所述,通过Arthas结合堆转储分析工具,你可以系统地定位并解决Java应用中的内存增长问题,特别是识别出具体是哪些对象在不断消耗内存资源。

---------------

参考链接 :#

*专家经验:Arthas 排查内存泄露的方法

*专家经验:Java 堆内存说明

*# profiler

---------------

答疑服务说明:#

本内容经由技术专家审阅的用户问答的镜像生成,我们提供了专家智能答疑服务,在页面的右下的浮窗”专家答疑“。您也可以访问 : 全局专家答疑 。 咨询其他产品的的问题

反馈#

如问答有错漏,欢迎点:差评给我们反馈。