JVM监控可以直观展示指定时间段内的多项内存指标,然而虽然图表能体现出内存使用量过大的情况,但无法显示具体信息,因此不能帮助您排查问题的原因。此时您可以创建内存快照,通过详细的日志查看内存占用的详细信息。
功能入口
- 登录EDAS控制台。
- 按需执行以下任一操作来进入应用的详情页面:
- 在左侧导航栏选择容器服务K8s集群或Serverless K8s集群页面单击集群ID,然后在集群详情页面的应用列表区域单击具体应用名称。 (或 ),在顶部菜单栏选择地域并在页面上方选择微服务空间,在
- 在左侧导航栏单击应用列表,在顶部菜单栏选择地域并在页面上方选择微服务空间,在集群类型下拉列表中选择容器服务/Serverless K8s集群,然后单击目标应用名称。
- 在应用详情的左边导航栏,选择 。
- 在实例监控页面左侧选择您需要查看的节点,并在页面右侧单击JVM监控页签。
创建内存快照
- 在JVM监控页签右上角,单击创建内存快照。说明 如果单击创建内存快照时,上一个快照任务仍在运行,则系统会弹出错误消息。请您耐心等待上一个快照任务运行完毕。目前仅支持为Linux系统新建内存快照。
- 在创建内存快照对话框中选择一个IP,并单击保存。警告 快照任务的运行时间从几分钟到半小时不等。应用进程在转储期间会停止响应,请谨慎使用。说明 如果在应用详情页面左侧已选择目标实例,则IP字段会默认选中该实例的IP地址。
查看内存快照详情
- 在JVM监控页签右上角,单击历史快照。
在快照任务数量面板展示了任务执行状态:绿色表示快照任务执行成功,蓝色表示快照任务执行中,红色表示快照任务执行失败。
快照任务名称的信息依次为:
- 内存分析状态
- 由IP地址和时间戳组成的快照任务ID
- 快照创建时间
- 单击开始分析,弹出提示对话框,单击确认。
- 单击分析结果,打开内存分析页面查看内存分析详情,帮助您查找内存泄漏信息,用于减少内存消耗。
- 单击概况页签,查看堆使用大小、类数量、对象数量、类加载器数量和根对象数量等统计信息,以及以环形图显示的内存占用情况。
- 单击泄露报表页签,可以查看消耗过多内存的可疑对象。单击页面下方的Problem Suspect查看可疑对象的具体实例、内存占用的情况以及类加载信息。
- 单击GC根对象页签,查看按根类型和Java类类型分类的所有根对象(被静态变量或线程栈等GC根引用的对象)。
- 单击支配树页签,查看堆中对象之间的支配关系,可以识别出占用了大量内存的对象和它们之间的依赖关系。
- 单击类视图页签,查看各个类型的堆使用情况和对应实例的数量。
- 单击不可达类视图页签,查看堆中未被引用的对象的大小及类型情况。
- 单击重复类视图页签,查看被多个类加载器加载的类型情况。
- 单击类加载器视图页签,查看应用当前使用到的所有类加载,以及每个类加载器加载类的情况。例如加载了哪些类,这些类有多少实例等。
- 单击堆外内存视图页签,查看应用目前使用的所有java.nio.DirectByteBuffer对象以及对应的堆外内存信息,用于排查由堆外内存导致物理内存消耗过多的问题。
- 单击系统属性页签,查看系统参数和环境变量。
- 单击线程信息页签,查看线程的相关信息,例如线程名、堆占用情况、调用栈信息、局部变量等。通过该视图您可以分析线程过多、死锁、调用栈过深等问题。
- 单击OQL页签,查询堆中的各种信息,例如所有长度大于2000的字符串。
- 单击概况页签,查看堆使用大小、类数量、对象数量、类加载器数量和根对象数量等统计信息,以及以环形图显示的内存占用情况。