记录一次内存溢出

1、查看catalina相关日志,确定关键字相关行号

复制代码
文件:catalina.out

命令1:cat -n catalina.out |grep -a 'OutOfMemoryError'


与内存溢出相关的如上,每一个行号其实都对应到具体时间点。可以发现,这个范围相符合:

633851  Apr 11, 2024 9:59:02 AM  -- 4月11日
633879  Apr 11, 2024 10:33:20 AM -- 4月11日

2、分析起止行号的日志

java 复制代码
命令2:cat -n catalina.out |tail -n +633500|head -n 400


633838  java.lang.OutOfMemoryError: Java heap space
633839  Dumping heap to /opt/web/oms.xxx.cn/java/java_pid17812.hprof ...

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=/opt/web/oms.xxx.cn/java

3、jhat,分析获取的.hprof文件

复制代码
jhat /Users/quanxin/Downloads/java_pid17812.hprof

jhat -J-mx10g /Users/quanxin/Downloads/java_pid17812.hprof

​​​​​​https://www.php.cn/faq/522972.html

4、关键字检索:Xobj$AttrXobj

内存溢出 org.apache.xmlbeans.impl.store.Xobj$AttrXobj

POI直接加载Excel文件导致的线上OOM问题_apache poi读取大的excle哪里容易产生oom-CSDN博客

5、安装mat 定位业务日志

参考5步,链接。使用MemoryAnalyzer加载dump文件, 查看Thread Stack线程栈信息

工具不行,太老了。eclipse下的插件。

安装一直失败,也许mac的原因。还需要对应jdk版本,太麻烦。

6、换个工具试试,JProfiler

如何使用,请自行百度,摸索半小时。

随便找几个看看,全部都定位到。

// at com.xxx.web.oms.controllers.detection.insurance.InsuranceController.add() (line: 1624)

用户操作记录

跟内存溢出的时间,基本吻合。

633851 Apr 11, 2024 9:59:02 AM -- 4月11日

633879 Apr 11, 2024 10:33:20 AM --

7、业务代码与结论

java 复制代码
WFHttpServletRequestWrapper rw = (WFHttpServletRequestWrapper) BeatContext.current().getRequest();
String filename = rw.getFile("fileName").getOriginalFilename();
Workbook wb = FileUtil.getWorkbook(rw, "fileName");

结果:用户导入一个excel,大约40MB,复制了很多空行导致。

相关推荐
五阿哥永琪10 分钟前
1. 为什么java不能用is开头来做布尔值的参数名,会出现反序列化异常。
java·开发语言
chilavert3182 小时前
技术演进中的开发沉思-371:final 关键字(中)
java·前端·数据库
海边的Kurisu2 小时前
Mybatis-Plus | 只做增强不做改变——为简化开发而生
java·开发语言·mybatis
识君啊2 小时前
Java 二叉树从入门到精通-遍历与递归详解
java·算法·leetcode·二叉树·深度优先·广度优先
daidaidaiyu2 小时前
一文学习 Spring AOP 源码全过程
java·spring
毕设源码-郭学长3 小时前
【开题答辩全过程】以 高校人事管理系统 为例,包含答辩的问题和答案
java
Zhu_S W3 小时前
Kubernetes (K8s) 完全指南:Java 开发者的容器编排实践
java·容器·kubernetes
罗超驿3 小时前
15. Java异常处理全解析:从底层原理到实战避坑指南
java·异常处理·开发实战·编程技巧·自定义异常·try-catch
柒.梧.3 小时前
吃透Spring Bean:生命周期、单例特性、作用域及扩展方式
java·后端·spring
zihan03213 小时前
若依(RuoYi)框架核心升级:全面适配 SpringData JPA,替换 MyBatis 持久层方案
java·开发语言·前端框架·mybatis·若依升级springboot