案例 | 业务员的非常规操作OOM故障处理

网友投稿 542 2022-10-23

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

案例 | 业务员的非常规操作OOM故障处理

OOM本质是程序程序申请内存过大,虚拟机无法满足我们,然后自杀了。OOM经常伴随Full GC,高JDBC, Pending User Request等一系列的问题内存溢出的案例数不胜数, 所以日常运维中我们需要尽量避免OOM的发生。

为了避免内存溢出的发生,我们往往会对内存中一些大对象的操作分外注意,时刻警惕因为逻辑不严谨产生的内存溢出。

但有时候,应用的操作人员总是以一种想不到的方式,用非常规的操作手法,引发OOM的惨案。

而这次的故事主角就是业务人员的非常规操作。

2019年某天,工程师接到了一个应用的多个节点不可用告警,经确认,日志中有明显的OOM报错,由于我们已经优化了生产环境参数,所以,在OOM的同时,应用也生成了对应的内存快照文件。

工程师迅速打开内存快照文件进行问题定位,从分析工具自动生成的报告文件看

只存在一个大的内存泄漏点a

可见13个

org.apache.poi.hssf.usermodel.HSSFSheet[]

占用了66.34%的内存。

工程师之前在其他地方就有遇到过org.apache.poi.hssf.usermodel.HSSFSheet[]这个类,这个类是在做Excel的相关操作。

工程师在执行线程中,查看13个实例中的其中一个28号线程的调用情况如下,另外,从调用的方法名来看是在做导出Excel表格操作:

at XXXX/querycount/action/TakerIoQueryAction.exportExcel

结合内存快照,我们可以确认。此段时间28号线程调用exportExcel方法的请求URL以及IP地址如下:

URL地址:/XXXX/XX/querycount/takerIoQuery.do

IP地址:10.XXX.XXX.XX2

另外,查看多个/XXXX/XX/querycount/takerIoQuery.do发现,请求发起的IP地址是相同的。

写在后面:

按开发人员常规的设计,同一时间不会有那么多的报表导出操作,即使有,也会由负载均衡器分发到不同节点。

但是很多时候业务的操作人员不会关心系统是怎么运行的,系统会不会有压力,所以为了提升业务工作效率,他们会手动开启多个作业页面进行业务处理。由于会话保持策略等原因,这些操作会同时分配到一个节点。这时候这些作业信息会疯狂的压榨系统的空闲资源(如内存),当业务人员觉得系统卡顿时,会时不时刷新下,加剧资源的使用。

所以,开发人员对于一些资源消耗非常敏感的操作,一定要做好业务层级的控制,避免一个业务人员提交大资源消耗的操作,也要避免业务人员同时提交多个大资源消耗的操作,最终导致系统卡死。

|  北京    |    上海    |   广州    |   成都    |

4008-906-960

上一篇:3D CAD建模协同平台云图三维连续完成数千万天使轮系列投资,初心资本连续支持
下一篇:“四度”思维完善养老保险制度, 助力老人乐享银龄生活
相关文章

 发表评论

暂时没有评论,来抢沙发吧~