内存快照

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

前提条件

使用限制

  • 创建内存快照需要确保操作账号具备AliyunARMSFullAccess权限。

  • 内存快照功能是JVM内置的HeapDump能力(等价于jmap -dump:all)的平台化,HeapDump本身可能出现占用一定量额外内存、触发SafePointGC等情况,这些情况会暂停所有非JVM Thread,从而造成应用暂停,暂停时间无法控制,因此请您在生产环境使用前做好相关风险评估后,再使用此功能。

  • 如果应用所部署环境的VPC网络配置了可访问阿里云对象存储OSSBucket限制策略,需要将内存快照功能相关的Bucket(arms-heapdump-<regionId>)配置在您的策略规则中。请将<regionId>换成对应的地域ID,例如您应用部署在cn-hangzhou地域,Bucket则对应为arms-heapdump-cn-hangzhou。

    说明

    由于该功能会将应用实例所采集的快照数据上传到ARMS统一的OSS Bucket中进行存储与处理,如果配置相关策略但未将ARMS统一的OSS Bucket配置在其中会导致数据无法被有效采集。

  • 快照的保存时长为90天。

功能体验

阿里云Playground提供了云监控2.0主要功能的演示环境,便于您快速了解及体验云监控2.0。

  1. 请访问 Playground Demo 演示环境,默认进入工作空间:o11y-demo-cn-hangzhou

  2. 在左侧导航栏选择应用中心 > 运维监控 > 应用监控

创建内存快照

  1. 登录云监控2.0控制台,选择目标工作空间,在左侧导航栏选择应用中心 > 运维监控 > 应用监控

  2. 应用列表页面单击目标应用名称,然后在顶部导航栏选择应用诊断 > 内存快照

  3. 单击创建,在创建内存快照对话框中选择一个IP,并单击确定

    说明

    如果在应用详情页面左侧已选择目标实例,则IP字段会默认选中该实例的IP地址。

  4. 在弹出的提示框中单击强制dump

    重要

    快照任务的运行时间从几分钟到半小时不等。应用进程在转储期间会停止响应,请谨慎使用。

查看内存快照详情

快照列表的状态列可以查看快照创建结果:绿色表示快照任务执行成功,蓝色表示快照任务执行中,红色表示快照任务执行失败。单击左侧image图标可以查看任务执行进度。

单击目标任务右侧的分析,在应用诊断分析平台查看分析结果。更多信息,请参见ATP文档

常见问题

为什么不能在应用出现OOM前自动创建快照并做分析?

一般应用在即将出现OOM前,系统资源使用率都很高,由于快照创建一般会占用一定资源,此时如果自动创建快照,有很大风险可能直接导致应用出现OOM,ARMS暂不支持这种使用场景。建议采用以下步骤进行快照获取与分析:

  1. 为应用配置以下参数后,应用出现OutOfMemoryErrorJVM将会自动生成内存快照,生成的快照文件路径被设置为/tmp/heap.bin

    注意,在Kubernetes环境下需要将/tmp/heap.bin路径挂载至外部存储卷,避免Pod重启导致文件丢失。

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heap.bin
  2. 将上一步在OOM时自动创建的内存快照上传到阿里云对象存储OSS中,具体操作,请参见开始使用OSS

  3. 使用阿里云应用诊断分析平台分析内存快照。具体操作,请参见快速入门Java堆分析