内存快照

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

前提条件

  • 已下载ARMS Java Probe探针,且探针版本为20210924日之后发布的2.7.1.2或以上版本。

  • 目前仅支持为Linux系统新建内存快照。

使用限制

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

  • 使用内存快照功能,对应用有以下依赖限制:

    • 2.7.3.5及以下版本的探针:不支持JRE环境、不支持Java 11、依赖JAVA_HOME环境变量、依赖JAVA_HOME/lib/tools.jar文件、不支持Alpine平台。

    • 2.8.3及以上版本的探针:支持JRE、支持Java 8Java 11、支持Alpine平台、依赖JAVA_HOME环境变量、依赖Java命令(需要将$JAVA_HOME/bin配置到PATH环境变量)。

    • 3.2.9及以上版本探针:内存快照进行了大量优化,已无需将$JAVA_HOME/bin配置到PATH环境变量。建议优先将探针升级到3.2.9或以上版本,升级操作请参见升级ARMS探针

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

    说明

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

  • 当前历史快照保存时长暂无限制,但ARMS将于20230701日零时调整历史快照的保存时长为90天,即0701日零时起,ARMS将不再保存90天前的快照任务,请及时做好数据备份。

创建内存快照

  1. 登录ARMS控制台,在左侧导航栏选择应用监控 > 应用列表

  2. 应用列表页面顶部选择目标地域,然后单击目标应用名称。

    说明

    语言列的图标含义如下:

    Java图标:接入应用监控的Java应用。

    image:接入应用监控的Golang应用。

    -:接入可观测链路 OpenTelemetry 版的应用。

  3. 在左侧导航栏单击应用详情,在页面右侧单击JVM监控页签。

  4. JVM监控页签右上角,单击创建内存快照

  5. 创建内存快照对话框中选择一个IP,并单击保存

    说明

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

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

    重要

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

查看内存快照详情

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

    快照任务数量面板展示了任务执行状态:绿色表示快照任务执行成功,蓝色表示快照任务执行中,红色表示快照任务执行失败。单击任务右侧的详情可以查看任务执行进度。

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