JVM监控可以直观展示指定时间段内的多项内存指标,虽然图表能体现出内存使用量过大的情况,但无法显示具体信息,因此不能帮助您排查问题产生的原因。此时您可以创建内存快照,通过详细的日志查看内存占用的详细信息,帮助您排查内存泄漏和内存浪费等内存问题。

功能入口

按照以下步骤进入内存快照功能。

  1. 登录ARMS控制台
  2. 在左侧导航栏中选择应用监控 > 应用列表
  3. 应用列表页面单击目标应用名称。
  4. 在左侧导航栏单击应用详情,在应用详情页面的左侧列表单击目标节点,并在页面右侧单击JVM监控页签。
ARMS应用监控-JVM监控

创建内存快照

  1. JVM监控页签右上角,单击创建内存快照
    说明 如果单击创建内存快照时,上一个快照任务仍在运行,则系统会弹出错误消息。请您耐心等待上一个快照任务运行完毕。目前仅支持为Linux系统新建内存快照。
  2. 创建内存快照对话框中选择一个IP,并单击保存

    警告 快照任务的运行时间从几分钟到半小时不等。应用进程在转储期间会停止响应,请谨慎使用。
    ARMS JVM监控-内存快照
    说明 如果在应用下的机器层面上新建快照,则IP字段会默认选中该机器的IP地址。

查看内存快照详情

创建成功后快照会显示在历史快照的快照任务列表中。

  1. JVM监控页签右上角,单击历史快照
    ARMS JVM监控-历史内存快照

    绿色表示快照任务执行成功,蓝色表示快照任务执行中,红色表示快照任务执行失败。每个快照任务的信息依次为:

    • 内存分析状态
    • 由IP地址和时间戳组成的快照任务ID
    • 快照创建时间
  2. 单击开始分析,弹出提示对话框,单击确认
  3. 单击分析结果,打开内存分析页面查看内存分析详情,帮助您查找内存泄漏信息,用于减少内存消耗。
    • 单击概况页签,查看堆使用大小、类数量、对象数量、类加载器数量和根对象数量等统计信息,以及以环形图显示的内存占用情况。pg_am_grace_overview
    • 单击泄露报表页签打开泄露报表,可以查看消耗过多内存的可疑对象。单击页面下方的Problem Suspect查看可疑对象的具体实例、内存占用的情况以及类加载信息。pg_am_grace_leak_report
    • 单击GC根对象页签,查看按根类型和Java类类型分类的所有根对象(被静态变量或线程栈等GC根引用的对象)。pg_am_grace_gc_roots
    • 单击支配树页签,查看堆中对象之间的支配关系,可以识别出占用了大量内存的对象和它们之间的依赖关系。pg_am_grace_class_view
    • 单击类视图页签,查看各个类型的堆使用情况和对应实例的数量。pg_am_grace_dominator_tree
    • 单击不可达类视图页签,查看堆中未被引用的对象的大小及类型情况。pg_am_grace_unreachable_view
    • 单击重复类视图页签,查看被多个类加载器加载的类型情况。pg_am_grace_repeating_class_view
    • 单击类加载器视图页签,查看应用当前使用到的所有类加载,以及每个类加载器加载类的情况。例如加载了哪些类,这些类有多少实例等。pg_am_grace_classloader_view
    • 单击系统属性页签,查看系统参数和环境变量。pg_am_grace_system_properties
    • 单击堆外内存视图页签,查看应用目前使用的所有java.nio.DirectByteBuffer对象以及对应的堆外内存信息,用于排查由堆外内存导致物理内存消耗过多的问题。pg_am_grace_heap_memory_view
    • 单击线程信息页签,查看线程的相关信息,例如线程名、堆占用情况、调用栈信息、局部变量等。通过该视图您可以分析线程过多、死锁、调用栈过深等问题。pg_am_grace_thread_information
    • 单击 OQL页签,查询堆中的各种信息,例如所有长度大于2000的字符串。pg_am_grace_oql