页面树结构
转至元数据结尾
转至元数据起始

错误现象

当日志中出现形如

03-04 10:10:39  WARN findFailedInstances(org.quartz.impl.jdbcjobstore.JobStoreTX:3298) - This scheduler instance (SMARTBI_I000000005f0c1fed014bdf0c4d030005_) is still active but was recovered by another instance in the cluster.  This may cause inconsistent behavior.

警告时,计划任务模块可能不能正常工作。

错误原因

这个警告的原因是,当使用Quartz的集群功能,当一个 Scheduler 实例执行检入的例程时,它会查看是否有其他的 Scheduler 实例在到达他们所预期的时间还未检入。这是通过检查 SCHEDULER_STATE 表并寻找 Scheduler 记录在 LAST_CHEDK_TIME 列的值是否早于 org.quartz.jobStore.clusterCheckinInterval() 属性值。如果一个或多个节点还没有检入,那么运行中的 Scheduler 就假定它(们) 失败了。

例如默认的CHECKIN_INTERVAL列值是7500 ms,有两台机器,一台机器的时钟慢了8000ms,当Scheduler1加入到SCHEDULER_STATE的时钟是例如是9000,Scheduler2加入到SCHEDULER_STATE的时钟是1000,当7500ms后Scheduler1检查Scheduler2时发现他已经超过了7500ms没有更新了,就会将Scheduler2实例接过这个 Job 重新运行但是实际上Scheduler2仍然在运行job。

解决方法

处理的方法如下。

  1. 若是集群环境,检查各个节点的时间是否同步。
  2. 若是非集群环境,在知识库检查 qrtz_scheduler_state表是否只有一条记录,若有多条记录,请停止服务器,清空该表后重启。

 

  • 无标签