一次只使用一根石英线

问题描述

我们正在使用quartz-scheduler 来调度大约500 个同时调度的Run-once 类型的作业。我们正在观察以下行为-

尽管石英调度器(org.quartz.threadPool.threadCount)中有 10 个线程,但只有一个工作线程在特定的时间实例按顺序执行,例如,如果工作线程 1 正在执行处理事件,它会先完成它,然后另一个线程会以相同的方式开始。(即使我们没有使用@disallowConcurrentExecution 注释,也会观察到这种行为)

我们想了解为什么会观察到这种行为,以及我们如何利用线程池中存在的所有线程来提高性能

使用的参数:

    @H_404_9@clusterCheckinInterval - 120000 @H_404_9@isClustered - 真 @H_404_9@misfireThreshold - 60000 @H_404_9@useProperties - 假 @H_404_9@instanceId - 自动 @H_404_9@线程数 -10 @H_404_9@线程优先级 - 5

使用的版本 -

    @H_404_9@石英调度程序 - 2.3.2 @H_404_9@spring-boot - 1.2.4 @H_404_9@弹簧上下文支持 - 5.2.1

日志-

{"ts":"03 23 2021 09:04:00.175","th":"EvtMgrQuartzThread_Worker-7","tenant":"","user":"null","trxid":"","level":"ERROR","logger":"WFC","msg":Execute method of quartz started:WFD-109904,scheduled fire time:  Tue Mar 23 09:04:00 UTC 2021  current fire time:  Tue Mar 23 09:04:00 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:27:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:04:00.177","th":"EvtMgrQuartzThread_Worker-7->threadcontext(ThreadStartTime=2021-03-23 09:04:00)","msg":Putting keys:WFD-109904  task id is:  27 current time is:  1616490240177   }
{"ts":"03 23 2021 09:04:00.179","msg":Put operation  completed:WFD-109904  task id is:  27 current time is:  1616490240179   }
{"ts":"03 23 2021 09:04:00.179","msg":Sending message  :WFD-109904  task id is:  27 current time is:  1616490240179   }
{"ts":"03 23 2021 09:04:00.183","msg":Message sent  :WFD-109904  task id is:  27 current time is:  1616490240183   }
{"ts":"03 23 2021 09:04:00.183","msg":Execute method of quartz completed:WFD-109904,scheduled fire time:  Tue Mar 23 09:04:00 UTC 2021  current fire time:  Tue Mar 23 09:04:00 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:27:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:04:00.820","th":"EvtMgrQuartzThread_Worker-1",scheduled fire time:  Tue Mar 23 09:04:00 UTC 2021  current fire time:  Tue Mar 23 09:04:00 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:4:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:04:00.821","th":"EvtMgrQuartzThread_Worker-1->threadcontext(ThreadStartTime=2021-03-23 09:04:00)","msg":Putting keys:WFD-109904  task id is:  4 current time is:  1616490240821   }
{"ts":"03 23 2021 09:04:00.822","msg":Put operation  completed:WFD-109904  task id is:  4 current time is:  1616490240822   }
{"ts":"03 23 2021 09:04:00.822","msg":Sending message  :WFD-109904  task id is:  4 current time is:  1616490240822   }
{"ts":"03 23 2021 09:04:00.826","msg":Message sent  :WFD-109904  task id is:  4 current time is:  1616490240826   }
{"ts":"03 23 2021 09:04:00.827",scheduled fire time:  Tue Mar 23 09:04:00 UTC 2021  current fire time:  Tue Mar 23 09:04:00 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:4:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:04:01.769","th":"EvtMgrQuartzThread_Worker-4",scheduled fire time:  Tue Mar 23 09:04:00 UTC 2021  current fire time:  Tue Mar 23 09:04:01 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:7:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:04:01.770","th":"EvtMgrQuartzThread_Worker-4->threadcontext(ThreadStartTime=2021-03-23 09:04:01)","msg":Putting keys:WFD-109904  task id is:  7 current time is:  1616490241770   }
{"ts":"03 23 2021 09:04:01.772","msg":Put operation  completed:WFD-109904  task id is:  7 current time is:  1616490241772   }
{"ts":"03 23 2021 09:04:01.772","msg":Sending message  :WFD-109904  task id is:  7 current time is:  1616490241772   }
{"ts":"03 23 2021 09:04:01.784","msg":Message sent  :WFD-109904  task id is:  7 current time is:  1616490241784   }
{"ts":"03 23 2021 09:04:01.784",scheduled fire time:  Tue Mar 23 09:04:00 UTC 2021  current fire time:  Tue Mar 23 09:04:01 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:7:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:04:02.313","th":"EvtMgrQuartzThread_Worker-6",scheduled fire time:  Tue Mar 23 09:04:00 UTC 2021  current fire time:  Tue Mar 23 09:04:02 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:8:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:04:02.314","th":"EvtMgrQuartzThread_Worker-6->threadcontext(ThreadStartTime=2021-03-23 09:04:02)","msg":Putting keys:WFD-109904  task id is:  8 current time is:  1616490242314   }
{"ts":"03 23 2021 09:04:02.316","msg":Put operation  completed:WFD-109904  task id is:  8 current time is:  1616490242316   }
{"ts":"03 23 2021 09:04:02.316","msg":Sending message  :WFD-109904  task id is:  8 current time is:  1616490242316   }
{"ts":"03 23 2021 09:04:02.328","msg":Message sent  :WFD-109904  task id is:  8 current time is:  1616490242328   }
{"ts":"03 23 2021 09:04:02.328",scheduled fire time:  Tue Mar 23 09:04:00 UTC 2021  current fire time:  Tue Mar 23 09:04:02 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:8:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:05:00.103","th":"EvtMgrQuartzThread_Worker-10",scheduled fire time:  Tue Mar 23 09:05:00 UTC 2021  current fire time:  Tue Mar 23 09:05:00 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:39:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:05:00.106","th":"EvtMgrQuartzThread_Worker-10->threadcontext(ThreadStartTime=2021-03-23 09:05:00)","msg":Putting keys:WFD-109904  task id is:  39 current time is:  1616490300106   }
{"ts":"03 23 2021 09:05:00.108","msg":Put operation  completed:WFD-109904  task id is:  39 current time is:  1616490300108   }
{"ts":"03 23 2021 09:05:00.108","msg":Sending message  :WFD-109904  task id is:  39 current time is:  1616490300108   }
{"ts":"03 23 2021 09:05:00.120","msg":Message sent  :WFD-109904  task id is:  39 current time is:  1616490300120   }
{"ts":"03 23 2021 09:05:00.120",scheduled fire time:  Tue Mar 23 09:05:00 UTC 2021  current fire time:  Tue Mar 23 09:05:00 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:39:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:05:00.515","th":"EvtMgrQuartzThread_Worker-3",scheduled fire time:  Tue Mar 23 09:05:00 UTC 2021  current fire time:  Tue Mar 23 09:05:00 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:43:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:05:00.516","th":"EvtMgrQuartzThread_Worker-3->threadcontext(ThreadStartTime=2021-03-23 09:05:00)","msg":Putting keys:WFD-109904  task id is:  43 current time is:  1616490300516   }
{"ts":"03 23 2021 09:05:00.518","msg":Put operation  completed:WFD-109904  task id is:  43 current time is:  1616490300518   }
{"ts":"03 23 2021 09:05:00.518","msg":Sending message  :WFD-109904  task id is:  43 current time is:  1616490300518   }
{"ts":"03 23 2021 09:05:00.525","msg":Message sent  :WFD-109904  task id is:  43 current time is:  1616490300525   }
{"ts":"03 23 2021 09:05:00.525",scheduled fire time:  Tue Mar 23 09:05:00 UTC 2021  current fire time:  Tue Mar 23 09:05:00 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:43:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:05:00.744","th":"EvtMgrQuartzThread_Worker-8",scheduled fire time:  Tue Mar 23 09:05:00 UTC 2021  current fire time:  Tue Mar 23 09:05:00 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:42:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:05:00.745","th":"EvtMgrQuartzThread_Worker-8->threadcontext(ThreadStartTime=2021-03-23 09:05:00)","msg":Putting keys:WFD-109904  task id is:  42 current time is:  1616490300745   }
{"ts":"03 23 2021 09:05:00.748","msg":Put operation  completed:WFD-109904  task id is:  42 current time is:  1616490300748   }
{"ts":"03 23 2021 09:05:00.748","msg":Sending message  :WFD-109904  task id is:  42 current time is:  1616490300748   }
{"ts":"03 23 2021 09:05:00.756","msg":Message sent  :WFD-109904  task id is:  42 current time is:  1616490300756   }
{"ts":"03 23 2021 09:05:00.756",scheduled fire time:  Tue Mar 23 09:05:00 UTC 2021  current fire time:  Tue Mar 23 09:05:00 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:42:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:05:00.965","th":"EvtMgrQuartzThread_Worker-9",scheduled fire time:  Tue Mar 23 09:05:00 UTC 2021  current fire time:  Tue Mar 23 09:05:00 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:4:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:05:00.966","th":"EvtMgrQuartzThread_Worker-9->threadcontext(ThreadStartTime=2021-03-23 09:05:00)","msg":Putting keys:WFD-109904  task id is:  4 current time is:  1616490300966   }
{"ts":"03 23 2021 09:05:00.967","msg":Put operation  completed:WFD-109904  task id is:  4 current time is:  1616490300967   }
{"ts":"03 23 2021 09:05:00.967","msg":Sending message  :WFD-109904  task id is:  4 current time is:  1616490300967   }
{"ts":"03 23 2021 09:05:00.975","msg":Message sent  :WFD-109904  task id is:  4 current time is:  1616490300975   }
{"ts":"03 23 2021 09:05:00.976",scheduled fire time:  Tue Mar 23 09:05:00 UTC 2021  current fire time:  Tue Mar 23 09:05:00 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:4:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:05:01.147","th":"EvtMgrQuartzThread_Worker-2",scheduled fire time:  Tue Mar 23 09:05:00 UTC 2021  current fire time:  Tue Mar 23 09:05:01 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:7:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:05:01.148","th":"EvtMgrQuartzThread_Worker-2->threadcontext(ThreadStartTime=2021-03-23 09:05:01)","msg":Putting keys:WFD-109904  task id is:  7 current time is:  1616490301148   }
{"ts":"03 23 2021 09:05:01.149","msg":Put operation  completed:WFD-109904  task id is:  7 current time is:  1616490301149   }
{"ts":"03 23 2021 09:05:01.149","msg":Sending message  :WFD-109904  task id is:  7 current time is:  1616490301149   }
{"ts":"03 23 2021 09:05:01.155","msg":Message sent  :WFD-109904  task id is:  7 current time is:  1616490301155   }
{"ts":"03 23 2021 09:05:01.155",scheduled fire time:  Tue Mar 23 09:05:00 UTC 2021  current fire time:  Tue Mar 23 09:05:01 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:7:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:05:01.319","th":"EvtMgrQuartzThread_Worker-5",scheduled fire time:  Tue Mar 23 09:05:00 UTC 2021  current fire time:  Tue Mar 23 09:05:01 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:8:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }
{"ts":"03 23 2021 09:05:01.320","th":"EvtMgrQuartzThread_Worker-5->threadcontext(ThreadStartTime=2021-03-23 09:05:01)","msg":Putting keys:WFD-109904  task id is:  8 current time is:  1616490301320   }
{"ts":"03 23 2021 09:05:01.322","msg":Put operation  completed:WFD-109904  task id is:  8 current time is:  1616490301322   }
{"ts":"03 23 2021 09:05:01.322","msg":Sending message  :WFD-109904  task id is:  8 current time is:  1616490301322   }
{"ts":"03 23 2021 09:05:01.326","msg":Message sent  :WFD-109904  task id is:  8 current time is:  1616490301326   }
{"ts":"03 23 2021 09:05:01.327",scheduled fire time:  Tue Mar 23 09:05:00 UTC 2021  current fire time:  Tue Mar 23 09:05:01 UTC 2021 JobDetail 'Event Manager:NULL.Event ManagerTask ID:8:NULL':  jobClass: 'com.xxx.KJob concurrentExectiondisallowed: false persistJobDataAfterExecution: false isDurable: true requestsRecovers: false   }

解决方法

有一个属性可以控制单个节点一次获取的触发器数量org.quartz.scheduler.batchTriggerAcquisitionMaxCount,试试这个数字

允许调度器节点一次获取(用于触发)的最大触发器数。默认值为 1。数字越大,触发效率越高(在需要一次触发非常多的触发器的情况下) - 但代价是可能会导致集群节点之间的负载不平衡。如果此属性的值设置为 > 1,并且使用 JDBC JobStore,则必须将属性“org.quartz.jobStore.acquireTriggersWithinLock”设置为“true”以避免数据损坏。

Link to Documentation

Link to code that acquires triggers