XxJob定时任务问题回顾记录

2024-06-12 23:38

本文主要是介绍XxJob定时任务问题回顾记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        Java web开发的日常工作中,大概率会有定时任务的场景,如果这种需求不多的情况下可以用Spring自带的Scheduled定时任务注解:

       如果这种需求较多,写在项目中可能比较混乱,不易管理和迭代,这时可以考虑用XxJob,将任务拆解出来独立成一个服务。XxJob是一个定时任务开源平台,能和Spring程序整合,首先有一个XxJob中心,注册中心登录上去是XxJob可视化面板,可以看到运行报表、任务管理、运行日志,运行日志中可以看到运行的状态,有成功、失败、进行中,服务启动时通过RPC调用向注册中心注册获取执行器地址,并注册任务,任务通过多态调用。 

 向注册中心注册获取执行器地址:

注册任务:

 日志:

       我的环境:服务器centos,容器docker,cpus:2,内存:4G,在docker上跑了10个服务,其它服务运行内存3G,我的4G。

       我的问题:部分服务运行时OOM。

第一阶段

        开始我负责的模块建了六十多个任务,8月初以来,任务一直不稳定,记得有一个周六早上要演示,带来了较多问题,前一天任务运行情况还好。一开始的问题主要是有失败、进行中的,那个时候参与的另一个模块的任务的几个任务也是进行中:

分析问题

       得益于XxJob可视化面板,可以看到失败的日志,基本是代码问题,跨月少表,代码缺陷,就改代码,内存不足就加了内存,从之前的2G加到4G,工作任务的是加到了3G,另外重新安排任务运行时间,期间多次调整过任务时间。

第二阶段

       到了9月中旬,需求基本研发完毕,代码趋于稳定,之前一些不好的写法也已经摒弃(比如一组不变的数据在循环中多次查询,改成在循环外一次查询准备好、部分有价值的统计先算好到一张表,后面用),多亏其他同事帮忙,任务从原来六十多个到二十多个左右,也便于管理,之前自己对公司的统计工具理解不到位,导致任务繁多实现不合理,改造之后,基本都是最可用的任务。问题仍然存在,基本都是进行中的问题。

分析问题

        观察了一段时间后,某一天早上突然发现进行中是因为执行器IP变了,当时彷佛发现了新大陆,以为找到了问题,就问同事,同事说执行器IP变了是因为服务重启了,重新注册后获得新的IP(但是宣哥说发版重建容器IP才会变,嗯,先这样吧),原因是OOM。

       再观察,发现进行中的任务是真的让人迷惑,没有规律,这就很奇怪,如果是代码问题,问题情况应该也是稳定的。主要有以下几点:

1.不是某一个/些固定的任务跑起来会进行中,这次是这个,下次可能是另外一个,之前没出现过的,也有可能出现。

2.不是每天跑任务都会有进行中,今天有,明天可能没有。

3.其他一个服务也有进行中的任务。

寻找问题

       本地运行那些出现过进行中的任务,观察内存占用,不到1G(我本地分配了2G运行内存)。

改代码

       通过观察本地监控,发现Map对象最多,查表也是放到Map,再是对Map的操作于是把用到Map的地方.get能换成.remove的地方换成.remove,遍历一个删一个。然后要查去年的地方把今年和去年也分开查了,改了下还是有进行中的任务。可以释放的地方改动点比较小。

       某一天晚上突然想到会不会是BigDecimal占用字节数太大,导致内存不足,我的所有表的字段基本都是BigDecimal,一共13个字段,一个表2万多数据,平均9张表,,然后网上(https://blog.csdn.net/yunqiinsight/article/details/80431831)找了一个方式,用instrumentation在jvm中监控,测了下BigDecimal占用四十多个字节:

        job中都是放在map中,又在job中测了下,换算了下也就5百M左右,和监控差不多。看日志,发现任务出现运行中的情况时服务确实有重启,但是没找到重启前的异常日志,虽然知道线上的日志位置,但是没权限进去。

还是没有找到问题

        最后实在没辙,想着只有我和另一个同事的两个服务是4G,其它的都是3G,要么改成3G试试。之前听运维同事说抽取服务的内存已经分配很多了,很消耗宿主机资源,就想会不会4G太多了,导致实际运行时给到的内存反而可能少,毕竟其它服务也都是3G了,其它一共9个服务,就27G了。

        改完看来运行正常了,当天中午改了后,下午手动点了下,晚上回去又手动点了下,都运行成功。任务是串行的。

总结:

       先从代码问题入手,自己先思考,再虚心求教。

       任务时间要注意,减少外部影响。

       任务改成用串行,减少内部影响。

       观察规律然后多次尝试。

这篇关于XxJob定时任务问题回顾记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055667

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优