问题描述
我们正在使用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
使用的版本 -
日志-
{"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”以避免数据损坏。