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

相关文章

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基