JVM监控可以直观展示指定时间段内的多项内存指标,虽然图表能体现出内存使用量过大的情况,但无法显示具体信息,因此不能帮助您排查问题产生的原因。此时您可以创建内存快照,通过详细的日志查看内存占用的详细信息,帮助您排查内存泄漏和内存浪费等内存问题。
前提条件
已将应用接入云监控2.0。
目前仅支持为Linux系统新建内存快照。
使用限制
创建内存快照需要确保操作账号具备AliyunARMSFullAccess权限。
内存快照功能是JVM内置的HeapDump能力(等价于jmap -dump:all)的平台化,HeapDump本身可能出现占用一定量额外内存、触发SafePoint和GC等情况,这些情况会暂停所有非JVM Thread,从而造成应用暂停,暂停时间无法控制,因此请您在生产环境使用前做好相关风险评估后,再使用此功能。
如果应用所部署环境的VPC网络配置了可访问阿里云对象存储OSS的Bucket限制策略,需要将内存快照功能相关的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。
请访问 Playground Demo 演示环境,默认进入工作空间:
o11y-demo-cn-hangzhou
。在左侧导航栏选择
。
创建内存快照
登录云监控2.0控制台,选择目标工作空间,在左侧导航栏选择 。
在应用列表页面单击目标应用名称,然后在顶部导航栏选择
。单击创建,在创建内存快照对话框中选择一个IP,并单击确定。
说明如果在应用详情页面左侧已选择目标实例,则IP字段会默认选中该实例的IP地址。
在弹出的提示框中单击强制dump。
重要快照任务的运行时间从几分钟到半小时不等。应用进程在转储期间会停止响应,请谨慎使用。
查看内存快照详情
快照列表的状态列可以查看快照创建结果:绿色表示快照任务执行成功,蓝色表示快照任务执行中,红色表示快照任务执行失败。单击左侧图标可以查看任务执行进度。
单击目标任务右侧的分析,在应用诊断分析平台查看分析结果。更多信息,请参见ATP文档。
常见问题
为什么不能在应用出现OOM前自动创建快照并做分析?
一般应用在即将出现OOM前,系统资源使用率都很高,由于快照创建一般会占用一定资源,此时如果自动创建快照,有很大风险可能直接导致应用出现OOM,ARMS暂不支持这种使用场景。建议采用以下步骤进行快照获取与分析:
为应用配置以下参数后,应用出现OutOfMemoryError时JVM将会自动生成内存快照,生成的快照文件路径被设置为
/tmp/heap.bin
。注意,在Kubernetes环境下需要将
/tmp/heap.bin
路径挂载至外部存储卷,避免Pod重启导致文件丢失。-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heap.bin
将上一步在OOM时自动创建的内存快照上传到阿里云对象存储OSS中,具体操作,请参见开始使用OSS。
使用阿里云应用诊断分析平台分析内存快照。具体操作,请参见快速入门Java堆分析。