目录

用户问题 :

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


专家官方解答 :

要使用Arthas查看Java内存中哪些对象在增长,我们可以按照以下步骤操作:

  1. 监控整体内存状态: 首先,你需要频繁地运行Arthas的memory命令来观察JVM的整体内存使用情况。这将帮助你识别是否有特定区域的内存持续增长,从而初步判断内存泄漏的可能性及大致位置。比如,如果g1_old_genheap区域的使用量不断上升,这可能是泄露发生的区域。

  2. 对比分析内存快照: 使用heapdump命令生成堆的全量内存信息。为了分析内存增长的具体对象,你需要在不同时间点执行此命令,比如每隔一段时间执行一次:

    [arthas@58205]$ heapdump arthas-output/dump_$(date +%Y%m%d%H%M%S).hprof
    

    这样每次生成的堆转储文件名都会包含时间戳,便于区分和对比。

  3. 分析堆转储文件: 生成的.hprof文件可以使用Eclipse Memory Analyzer (MAT) 工具进行分析。通过MAT,你可以对比不同时间点的堆转储,查找那些对象数量或内存占用显著增加的实例。重点关注这些对象的引用链,以确定是哪些部分的代码持有这些不再需要但仍被引用的对象,从而导致内存泄漏。

  4. 使用Live对象分析: 若要专注于未被垃圾回收的对象,可以在使用MAT或其他分析工具时,利用其提供的功能来筛选出活对象(即在分析时仍存在的对象)。这可以通过开启相应的分析选项或在执行命令时加入特定标志,如MAT中直接分析 .hprof 文件时自然聚焦于存活对象,而在Arthas中,虽然直接命令不提供--live选项,但分析过程中关注未被回收的对象也是关键。

  5. 总结与定位: 综合上述分析结果,定位到具体增长的对象类型及其在代码中的引用源头。一旦发现可疑对象,就需要审查相关代码逻辑,修复潜在的内存泄漏问题,比如未及时释放资源、集合类未清理等。

请记得,在进行这些操作时,要根据实际的内存使用情况和应用特点灵活调整分析策略,以最高效地定位问题。

注意:上述步骤依赖于Arthas工具及其提供的命令,请确保你的环境中已正确安装并配置了Arthas。此外,频繁的堆转储操作可能会对应用性能产生影响,因此在生产环境中实施时需谨慎选择时机。

参考链接 :

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

专家经验:Java 堆内存说明

profiler

本内容经由技术专家审阅的用户问答的镜像生成,我们提供了,在。您也可以访问 : 全局专家答疑在新窗口打开 。 咨询其他产品的的问题

反馈

如问答有错漏,欢迎点:差评在新窗口打开给我们反馈。