记一次线上机器OOM的排查过程

一、报错示例

首先是收到了,测试人员反馈的我们的灰度环境多个接口调用超时的情况,登录线上的机器查看错误如下:

2022-07-22 22:04:08.731 ERROR 22110 --- [http-nio-9099-exec-14] o.a.c.c.C.[.[.[/bs].[dispatcherServlet]  : Servlet.service() for servlet [dispatcherServlet] in context with path [/bs] threw exception [Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: 
### Error updating database.  Cause: java.sql.SQLException: Error
### The error may involve com.mintrust.bs.dao.mappers.FailRecordInfoMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO t_fail_record_info  ( id,req_uri,agent,version,serial_no,fail_code,fail_reason,fail_type,customer_id,mobile,certificate_no,real_name,order_no,create_time,req_param ) VALUES( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,? )
### Cause: java.sql.SQLException: Error
; uncategorized SQLException for SQL []; SQL state [null]; error code [0]; Error; nested exception is java.sql.SQLException: Error] with root cause

java.lang.OutOfMemoryError: Java heap space

很明显这是一个堆溢出的异常,查看了我们的启动参数,发现并没有添加在OOM生成dump文件的参数,添加启动参数 -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/Users/candy/dumptest(dump文件保存的路径) 重新启动服务器

二、dump文件分析

以下是我我在本地机器用自己的环境测试了一下分析dump文件的步骤:

2.1 java代码
   public static void main(String[] args) {
        List<String> list = new ArrayList<>();
       while (true){
           list.add(UUID.randomUUID().toString());
       }
    }
2.2 修改启动参数

在这里插入图片描述

2.3 添加以下启动参数:

-Xms20m
-Xmx20m
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/Users/candy/dumptest

运行完以上代码,发现了已经成功OOM,然后将dump文件在指定目录下生成了
在这里插入图片描述
将生成的dump文件后缀名改成.jps
然后用Jprofiler分析工具对我们生成的文件进行分析
在这里插入图片描述

3. JProfiler工具下载

工具下载地址(Mac版): 链接:https://pan.baidu.com/s/1yq-8WR2CYskBgQH25VFGoA?pwd=3941
提取码:3941
复制这段内容打开「百度网盘APP 即可获取」

3.1 选择打开一个快照:

在这里插入图片描述

3.2 选择最大对象,可以看出来我们OOM的原因主要是因为list这个最大的对象

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值