目录

用户问题 :

如何使用arthas查看系统哪个地方内存占用过大


专家官方解答 :

要使用Arthas查看系统中哪个地方的内存占用过大,可以遵循以下步骤进行排查:

  1. 初步检查JVM内存状态: 首先,使用Arthas的memory命令来观察JVM各内存区域的使用情况。这会提供一个整体视图,帮助你识别哪些区域的内存使用异常增高。执行命令如下:

    $ memory
    

    分析输出结果,注意usage列,特别是那些利用率高或持续增长的区域,如heapg1_old_gen等,这些可能是内存泄漏的迹象。

  2. 定位内存泄漏的具体位置:

    • 多次运行memory命令: 通过连续多次执行memory命令并记录结果,观察特定区域的内存使用是否持续上升,以此来定位潜在的内存泄漏源。
    • 使用heapdump进行深入分析: 当发现可疑内存区域后,使用heapdump命令生成堆的快照文件,以便进一步分析。例如:
      [arthas@58205]$ heapdump arthas-output/dump.hprof
      
      然后,利用Eclipse Memory Analyzer (MAT)等工具打开.hprof文件,分析对象的分配、引用链和内存占用情况,找出内存泄漏的具体对象。
  3. 分析heapdump文件: 在MAT中,关注以下几个方面来定位内存泄漏:

    • 查找大对象和频繁增长的对象集合。
    • 使用“Leak Suspects”报告自动分析潜在泄漏。
    • 检查对象保留集大小,了解哪些对象阻止了垃圾回收。
  4. 结合profiler meminfo(如果需要): 如果怀疑是Arthas自身或其profiler功能导致的额外内存占用,可以使用profiler meminfo命令来查看Arthas内部组件的内存使用情况,但这通常不是排查应用内存泄漏的主要步骤。

通过上述步骤,你可以逐步定位并诊断出系统中内存占用过大的具体原因,并针对性地进行优化或修复。记住,解决问题的关键在于持续观察内存使用趋势并细致分析heapdump信息。

参考链接 :

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

profiler

专家经验:Arthas 介绍

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

反馈

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