我正在使用石英简单触发器(石英2.2.1),无限期地设置为重复。所有的时间表在生产中运行良好,但最近他们停止了工作,下一次开火时间也没有更新。 如果我使用rescheduleJob quartz API更新计划,它可以正常工作,然后再次处于卡住状态。 关于这是怎么发生的任何信息?
线程转储使用onObject监视显示处于Timed waiting状态的所有线程。
"UDPQuartzScheduler_Worker-8" #49 prio=4 os_prio=0 tid=0x00007f88d71a8000 nid=0x30b6 in Object.wait() [0x00007f8928b30000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)
- locked <0x00000006ddc9d6b0> (a java.lang.Object)
"UDPQuartzScheduler_Worker-7" #48 prio=4 os_prio=0 tid=0x00007f88d71a6000 nid=0x30b5 in Object.wait() [0x00007f8928c31000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)
- locked <0x00000006ddc9d6f8> (a java.lang.Object)
"UDPQuartzScheduler_Worker-6" #47 prio=4 os_prio=0 tid=0x00007f88d71a4000 nid=0x30b4 in Object.wait() [0x00007f8928d32000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)
- locked <0x00000006ddc9f000> (a java.lang.Object)
答案 0 :(得分:1)
我们在一个项目上遇到的问题完全相同(仅在Oracle上)。从来没有找到问题的根源,但我们的结论是,当重新启动数据库时,Quartz也需要重新启动。
我们有很多奇怪的症状,除了简单地跳过执行 - 同一个工作的多次执行,未在群集设置中同步的工作人员等等。所有这些都是随机的,我们无法识别任何模式。 / p>
答案 1 :(得分:0)
即使增加了线程数,您也可能面临同样的问题,因为您的工作线程会再次卡住。 要解决此问题,您必须检查您的工作线程代码并检查他们遇到的天气或某些任务执行时间过长(基本上是在您编写时发生的) /读取太多数据)。这两个原因也会造成失火问题。
如果你找不到与我上面提到的点相关的任何事情,那么你可以通过worker创建单独的线程,而不是在工作线程上执行它。它肯定会解决您的问题但如果您在应用程序进程中遇到太多线程,那么您的应用程序将会卡住,但同时您将从应用程序进程堆栈跟踪中获得此问题的确切原因。