JAVA线上事故:递归导致的OOM

news2024/9/23 19:20:00

最近因为人员离职,接手一个项目,是xxljob的客户端,部署在k8s上,在排查线上工单时,发现了一个问题:

在管理界面上,我惊讶的发现,三个月的时间,2个Pod,每个都重启了近400次,平均每天重启4次+

因为是无交接接手,业务不熟(最头疼),架构也不熟,硬着头皮去摸索,先从打印日志开始。

打了日志后,开始发现一些端倪,job只有开始,没有结束,也即是说,每次调度开始后,没跑完Pod就重启了,以我的经验,Pod重启可能有以下几种可能:

  • 1,资源耗尽,包括CPU耗尽、JVM内存耗尽OOM;
  • 2,心跳检测异常;

可以很快的排除2,首先是Pod是跑了一段时间才重启的,其次是即便是心跳检测异常,大概率是1引起,不太可能是单纯的心跳检测异常。

我首先是超OOM这个方面去排查,最后证明这个方向是正确的。

据我以往使用XXL-JOB的经验,阻塞策略如果配置的是【单机串行】,可能会导致大量任务堆积在客户端,最终导致OOM。

但当前场景不太可能是这个原因,因为配置的是2小时跑一次,最多也才堆积6个任务,事实上,由于Pod频繁重启,根本就没有任务堆积。

据此推断,单次任务的执行导致了OOM。

是因为数据量太大吗?

于是把并行改成串行,并加限制条件,以业务上的最小粒度执行任务,情况并无好转,单个任务仍然会导致OOM,Pod重启。

只能硬着头皮看代码了,非常痛苦,特别是看别人的代码,心里一直在反复念叨:写得真垃圾。倒没太多恶意,只是宣泄一下而已,别人看我的代码估计也会这样想吧,哈哈。

功夫不负有心人,在代码发现了一个递归调用:
在这里插入图片描述
注意看这个函数的前两行,每次调用都把传进来的List集合保存到新的集合对象中,且其中一个集合的size只会增大不会减小,递归的层次是由第二个集合的初始size决定的,悲剧的是,第二个集合是可能很大的,最终导致的结果就是在使用jmap -histo 看到的有2700W+个PromotionListingOverlayPO对象在内存中:

在这里插入图片描述

到此,OOM就一点都不奇怪了。

找到问题了,自然就容易解决,一个双层for循环就搞定了,不知道当初那位同事为什么会这么写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1324849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ClickHouse中的CPU调度

本文字数:14267;估计阅读时间:36 分钟 作者:Maksim Kita 审校:庄晓东(魏庄) 本文在公众号【ClickHouseInc】首发 概述 在这篇文章中,我将描述向量化的工作原理,什么是CP…

ASP.NET MVC权限管理系实战之一验证码功能实现

1,权限的管理系统:开发项目必备的一个的功能;该项目使用 ASP.NET MVC5 SqlServer EF6 IOC容器 BoostStrap 2,登录界面验证码功能实现,整体效果如下; 3,接下来就是代码部分实现,前端…

C#使用HTTP方式对接WebService

C#使用HTTP方式对接WebService C#对接WebService的几种方式 1.直接引用服务 添加服务 添加成功后, 会显示服务详细 调用服务 使用HTTPPost调用WebService option.RequestDataStr GetHttpRequestXml(strXmlBody); // 创建一个 HttpClient 对象 using (HttpClient client …

vba中字典的应用实例

vba中熟练使用字典可以帮我们解决很多问题,以下为字典的应用方法及案例: Sub dictionary() Dim d As New dictionary 定义字典 Dim mykey As Variant Dim myitems d.Add "1100000", "身份证" 字典录入key关键字和item条目 d.Add &q…

数字化技术助力英语习得 iEnglish成智慧化学习新选择

日前,美剧《老友记》中钱德勒的扮演者马修派瑞去世的消息引发不少人的回忆杀。《老友记》官方发文悼念马修派瑞:“对于马修派瑞去世的消息,我们深感悲痛,他是给我们所有人的真正礼物,我们的心和他的家人、爱人、所有的粉丝在一起。” 作为不少国人刷剧学习英语的首选,《老友记…

排序算法——快排

快速排序算法最早是由图灵奖获得者Tony Hoare设计出来的,他在形式化方法理论以 及ALGOL.60编程语言的发明中都有卓越的贡献,是20世纪最伟大的计算机科学家之—。 而这快速排序算法只是他众多贡献中的—个小发明而已。 快速排序(Quick Sort)的基本算法思…

1_js基本简介数据类型变量的使用

1. 编程语言简介 1.1 计算机编程语言 计算机编程语言是程序设计的最重要的工具,它是指计算机能够接受和处理的、具有一定语法规则的语言。从计算机诞生,计算机语言经历了机器语言、汇编语言和高级语言几个阶段。 高级语言:JavaScript&#x…

vue打包内存问题解决办法<--- Last few GCs ---><--- JS stacktrace --->

**<— Last few GCs —> [18484:0000026763669610] 106760 ms: Mark-sweep 4016.0 <— JS stacktrace —> FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory** 解决办法&#xff1a; set NODE_OPTION…

PaddleOCR Docker 容器快捷调用,快捷调用OCR API

文章目录 搞环境命令行测试Python调用测试转fastapi服务打包成镜像服务快速启动paddleOCR paddleOCR迎来大更新&#xff0c;搞一把新的api接口&#xff0c;直接用起来。 搞环境 搞容器&#xff1a; FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04 ENV DEBIAN_FRONTENDno…

CUDA 学习记录2

1.是否启用一级缓存有什么影响&#xff1a; 启用一级缓存&#xff08;缓存加载操作经过一级缓存&#xff09;&#xff1a;一次内存十五操作以128字节的粒度进行。 不启用一级缓存&#xff08;没有缓存的加载不经过一级缓存&#xff09;&#xff1a;在内存段的粒度上&#xff…

条款6:若不想使用编译器自动生成的函数,就该明确拒绝

有些场景我们不需要编译器默认实现的构造函数&#xff0c;拷贝构造函数&#xff0c;赋值函数&#xff0c;这时候我们应该明确的告诉编译器&#xff0c;我们不需要&#xff0c;一个可行的方法是将拷贝构造函数和赋值函数声明为private。 class HomeForSale { ... }; HomeForSal…

故障排查:shell脚本输出乱码

博客主页&#xff1a;https://tomcat.blog.csdn.net 博主昵称&#xff1a;农民工老王 主要领域&#xff1a;Java、Linux、K8S 期待大家的关注&#x1f496;点赞&#x1f44d;收藏⭐留言&#x1f4ac; 目录 故障详情故障原因解决方法iconv命令介绍 故障详情 最近的工作中遇到一…

Python Opencv实践 - 手势音量控制

本文基于前面的手部跟踪功能做一个手势音量控制功能&#xff0c;代码用到了前面手部跟踪封装的HandDetector.这篇文章在这里&#xff1a; Python Opencv实践 - 手部跟踪-CSDN博客文章浏览阅读626次&#xff0c;点赞11次&#xff0c;收藏7次。使用mediapipe库做手部的实时跟踪&…

Linux静态ip

Linux静态ip Ⅰ、修改静态ip Ⅰ、修改静态ip 修改静态ip必须是root用户 su root //切换root用户 ip a //查看修改前的动态ipvi /etc/sysconfig/network-scripts/ifcfg-ens33 //打开网卡配置文件&#xff0c;修改一处&#xff0c;新增四处 BOOTPROTO&quo…

[Realtek sdk-3.4.14b]RTL8197FH-VG+RTL8812F WiFi使用功率限制功能使用说明

sdk说明 ** Gateway/AP firmware v3.4.14b – Aug 26, 2019**  Wireless LAN driver changes as:  Refine WiFi Stability and Performance  Add 8812F MU-MIMO  Add 97G/8812F multiple mac-clone  Add 97G 2T3R antenna diversity  Fix 97G/8812F/8814B MP issu…

智能优化算法应用:基于人工水母算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于人工水母算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于人工水母算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工水母算法4.实验参数设定5.算法结果6.…

MongoDB的原子操作findAndModify和findOneAndUpdate

本文主要介绍MongoDB的原子操作findAndModify和findOneAndUpdate。 目录 MongoDB的原子操作一、findAndModify二、findOneAndUpdate MongoDB的原子操作 MongoDB的原子操作指的是在单个操作中对数据库的数据进行读取和修改&#xff0c;并确保操作是原子的&#xff0c;即要么完全…

轮滑加盟培训机构管理系统源码开发方案

一、项目背景与目标 &#xff08;一&#xff09;项目背景 随着轮滑运动的普及和市场需求的增加&#xff0c;轮滑加盟培训机构逐渐兴起。这些机构面临着学员管理、课程排班、教师管理等多方面的挑战。为了提高管理效率和服务质量&#xff0c;需要开发一套专门针对轮滑加盟培训…

[总线仲裁]

目录 一. 集中仲裁方式1.1 链式查询方式1.2 计数器查询方式1.3 独立请求方式 二. 分布式仲裁方式 总线仲裁是为了解决多个设备争用总线这个问题 \quad 一. 集中仲裁方式 \quad 集中仲裁方式: 就像是霸道总裁来决定谁先获得总线控制权 分布仲裁方式: 商量着谁先获得总线控制权 …

SQL学习笔记+MySQL+SQLyog工具教程

文章目录 1、前言2、SQL基本语言及其操作2.1、CREATE TABLE – 创建表2.2、DROP TABLE – 删除表2.3、INSERT – 插入数据2.4、SELECT – 查询数据2.5、SELECTDISTINCT – 去除重复值后查询数据2.6、SELECTWHERE – 条件过滤2.7、AND & OR – 运算符2.8、ORDER BY – 排序2…