最近运维同学在容器化生产环境,买了一些ECS的临时机器,这些临时机器性能不如生产环境的机器。先把定时任务迁移到容器化环境,然后发生特别奇怪的问题。没有执行时间,执行时间为空的越来越多,原来是好好的,为啥迁移完环境就有问题啦呢?
慌得一笔,确实机器配置低。程序员第一板斧:加配置重启。后来尼玛,调度报警群里报警信息太多啦,直接把机器人移除了,做一次掩耳盗铃。增加完配置执行时间为空的任务少的多了,但问题还没得到解决?!
我们的调度任务:job300 。1个admin,4个executor这样的部署的。说实在话admin应该至少两个节点。
xxl-job-admin模块是调度中心,用来管理调度任务的可视化界面。调度中心支持集群部署,提升调度系统容灾和可用性。调度中心集群部署时,要求DB配置保持和集群机器时钟保持一致。
xxl-job-executor是执行器,提供默认执行器,也可以搞多个执行器,不同服务用不同执行器。
其实xxl-job会做线程池隔离:调度线程池进行隔离拆分,慢任务自动降级进入slow线程池,避免耗尽调度线程,提高系统稳定性。一旦慢任务过多,slow triggerpool 会被撑爆,导致慢任务调度无法执行。
代码语言:javascript复制## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
由于机器性能差,越来越多的慢任务被扔到slow triggerpool等待,最终triggerpool被撑爆。
我们应该怎么解决?调整triggerpool.slow 的最大值,定时任务设置超时时间。经过这两个调整,问题得到解决。
精进自省:遇到一群可爱的人,一路走来学会了很多,成长了很多,感恩遇见。一路走来,没有敌人,看见的都是朋友和师长。