使用 JPS 和 JMAP 排查并下载 Head Dump 文件

118 阅读1分钟

 问题描述

在 Linux 系统环境下部署的多个微服务,其中一个模块的微服务会在运行过一段时间后,服务宕机,导致整体服务不可用。排查日志后发现是服务运行过程报 OOM 异常,需进一步排查异常原因。

微服务使用 Springboot 框架开发,数据库使用的是关系型数据库 Mysql,web 应用服务器使用的是 Tomcat。前端及其他中间件模块暂且不表,此篇内容只针对后端服务的问题排查。

排查过程

1.登录服务所在的 Linux 系统,使用 JPS 命令,查看服务进程

​编辑

2.利用 JMAP 命令列出服务的内存映射

​编辑

业务系统在开发的过程中,会容易出现对象的引用一直占用,例如死锁,会出现一直占用回收不掉的情况,而且当内存占用的一定程度的情况下,会频繁出现 Full GC 的情况,导致 CPU 占用过高,服务宕机。

解决方法

1.使用 JMAP -DUMP 命令导出离线文件

​编辑

我们在获取到 Head dump 文件后,可以使用JDK自带的工具进一步分析。