在Ubuntu 16 / Java 8_181上运行Lucee Lucee 5.2.7.62。
几天前,CPU使用率开始以大约50%的速度运行,这似乎是由于属于Lucee的两个Java线程在旋转。重新启动Lucee和O / S无效-旋转行为会在Lucee运行时立即开始。
使用FusionReactor进行深入研究,该问题似乎与计划任务有关。在此错误之前,似乎没有对计划任务进行任何更改。该服务器位于英国时区-我想知道问题是否与本周末从GMT切换到BST有关,尽管该问题是在几天前开始的。
当我在Fusionreactor中堆栈跟踪旋转线程时,通常会看到类似以下内容:
java.util.SimpleTimeZone.getOffsets(SimpleTimeZone.java:551)
- waiting on <0x5d7f0b89> (a java.util.SimpleTimeZone held by thread 84, Thread-50)
java.util.SimpleTimeZone.getOffset(SimpleTimeZone.java:540)
sun.util.calendar.ZoneInfo.getOffsets(ZoneInfo.java:293)
sun.util.calendar.ZoneInfo.getOffsets(ZoneInfo.java:236)
java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2340)
java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2312)
java.util.Calendar.setTimeInMillis(Calendar.java:1804)
java.util.GregorianCalendar.add(GregorianCalendar.java:1076)
lucee.runtime.schedule.ScheduledTaskThread.calculateNextExecution(ScheduledTaskThread.java:219)
lucee.runtime.schedule.ScheduledTaskThread._run(ScheduledTaskThread.java:121)
lucee.runtime.schedule.ScheduledTaskThread.run(ScheduledTaskThread.java:87)
最佳答案
Fusionreactor指出了“计划任务”的问题,“线程可视化器”显示了两个旋转任务,堆栈跟踪类似于以下内容。
我杀死了这些线,旋转停止了。然后,我可以看到两个计划的任务用粉红色标记为Lucee管理员已永久停止。重新启用这些进程并重新启动Lucee,使问题再次出现,因此我再次杀死了它们,而在Lucee Administrator中,任务又一次变粉红色。他们也没有按照正常的时间表跑步。其他计划的任务仍然运行正常,几个小时后一切仍然正常。
然后,我删除并重新创建了似乎是有问题的两个计划任务,然后重新启动了Lucee。这两个任务按计划执行。因此,我得出的结论是,这两个任务的计时信息以某种方式已损坏,从而导致Lucee尝试计算下一个运行时间时发生旋转。 Luce源代码似乎正在旋转,它有一个“ while(1)”循环,似乎在增加一个日期变量-我怀疑这就是问题所在。
总而言之,获取计划任务的快照并重新创建,您可能会有解决方法。