Quartz是一个流行的Java应用开源作业调度库。eBay在自己的很多项目中用它来调度作业。
Quartz在低负载时运行良好,但在高负载时会遇到问题。许多触发器会失效,导致执行线程无法得到任务,大量作业阻塞在触发器表中。
所以我们必须进行性能调优。本章描述我们是如何逐步解决问题并优化Quartz的。
问题在哪?
1.Quartz作业不能被调度和执行。
2.许多作业在simple_triggers表中等待执行,但一些作业在fired_triggers中。这些简单触发器应当设置REPEAT_INTERVAL,表明它们是重复作业。
TIMES_TRIGGERED表示该作业被触发的次数
3.日志文件中有大量的“Handling the first 20 triggers that missed their scheduled fire-time …”(处理错过调度触发时间点的前20个触发器)
4.数据库session增加,许多session等待在“SELECT * FROM qrtz_LOCKS WHERE SCHED_NAME = ‘{SCHED_NAME}‘ AND LOCK_NAME = ‘TRIGGER_ACCESS’ FOR UPDATE”。
什么是触发器失效?
在我们能理解为什么发生之前,先来看看触发器失效。这是来自Quartz官方网站的解释:
触发器失效发生在一致性触发器,因为调度器关闭而错过触发时间点&#