文章目录
一、报错示例
首先是收到了,测试人员反馈的我们的灰度环境多个接口调用超时的情况,登录线上的机器查看错误如下:
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 即可获取」