【问题标题】:Quartz JobStoreSupport recoverMisfiredJobs Handling 3 trigger(s) that missed their scheduled fire-timeQuartz JobStoreSupport recoverMisfiredJobs 处理 3 个错过预定触发时间的触发器
【发布时间】:2014-09-08 16:51:21
【问题描述】:

我们有一个可以在其他环境中运行良好的石英应用程序。

但是当我们将它部署在有两个需求的集群环境中时,它就停止了工作。我只能看到下面显示的大量日志。

任何想法可能导致它?我确信这不是我们的代码,因为它从未经过任何 TaskHandlers。

[7/17/14 13:14:54:236 EDT] 00000025 JobStoreTX I org.quartz.impl.jdbcjobstore.JobStoreSupport recoverMisfiredJobs 处理 3 个错过预定触发时间的触发器。

更新:

我怀疑这可能是由于事务隔离级别配置。目前,石英数据源配置为 TRANSACTION_READ_COMMITTED (CS)。对适当的值有什么建议吗?

TRIGGERS 表也显示它从未触发过。

NEXT_FIRE_TIME PREV_FIRE_TIME PRIORITY TRIGGER_STATE TRIGGER_TYPE START_TIME END_TIME CALENDAR_NAME MISFIRE_INSTR 1405630189133 -1 5 等待 CRON 1405624813000 0 0 1405630189139 -1 5 等待 CRON 1405624813000 0 0 1405630215140 -1 5 等待 CRON 1405624813000 0 0 1405630189126 -1 5 等待 CRON 1405624813000 0 0

【问题讨论】:

  • 你是怎么解决这个问题的?
  • 问题不在于石英。有一些逻辑问题导致线程被阻塞。
  • 你能解释一下吗?
  • 如果您有 10 个石英线程供触发器使用,并且触发器设置为每秒触发一次。当触发代码执行时间过长时,即 1 分钟,然后在 10 次触发后,线程耗尽,从而阻塞后续触发。因此,导致未命中火灾。这只是我做了一些测试后的观察。

标签: quartz-scheduler


【解决方案1】:

你的工作要么实现org.quartz.StatefulJob,要么你可能有注释@DisallowConcurrentExecution

这将使调度程序等待,直到通过同一调度程序触发的上一个作业完成,这样就不会发生重叠。

我建议要么增加两个连续作业之间的时间间隔,要么更改org.quartz.jobStore.misfireThreshold 属性。

【讨论】:

    【解决方案2】:

    处理错过预定触发时间的 x 个触发器

    主要是由于线程池被耗尽。检查一个作业的多个实例是否处于运行状态

    【讨论】:

    • 我在 quartz.properties 文件中将此设置从 2 增加到 10,并且失火消息消失了。 org.quartz.threadPool.threadCount=10
    猜你喜欢
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    相关资源
    最近更新 更多