首页 > 解决方案 > Azure 上的 Lucee/Java 与 100% 的 CPU 使用率挂钩

问题描述

在此处输入图像描述 在今天的wtf一集正在进行中......

我们最近几天一直遇到的问题。出于某种原因,Java 被固定在 100% 的 cpu 使用率上。如果我们禁用 lucee 服务,cpu 使用率就会下降到正常水平。一旦我们启用它,cpu 使用率立即飙升至 100%。

完整路径是

/opt/lucee/jdk/jre/bin/java -Djava.util.logging.config.file=/opt/lucee/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

我们运行 Lucee 的其他服务器显示此进程通常具有大约 1-3% 的 cpu 使用率。

  1. 我们已经多次重启 Ubuntu 无济于事。
  2. 我们已经禁用了所有端口,以防出现一些奇怪的流量导致问题,但同样无济于事。
  3. 我们已经验证没有运行 lucee 脚本任务。
  4. 我们确实有一个与 Microsoft 一起运行的单独 SQL 服务实例,它没有显示任何奇怪的数据库使用情况。我们还有大约 5 台其他服务器访问相同的数据库并且没有遇到此问题。
  5. 我已将 Lucee 从 5.3.4.80 降级到 5.2.9.3,再次没有运气

服务器的其他信息

OS      Linux (4.4.0-174-generic) 64bit
Servlet Container   Apache Tomcat/8.5.6
Java    1.8.0_112 (Oracle Corporation) 64bit

这最初是在大约两周前发生在我们身上的。我们于 2 月 24 日星期一进来,到美国东部时间上午 9 点左右,我们的一台服务器开始遇到此问题。我们设置了一个单独的 Azure VM 并复制了我们所有的文件,并让一切正常运行。现在,两周后,另外两台服务器开始出现同样的问题。

感谢你们可以提供的任何帮助。

标签: ubunturesourcescpulucee

解决方案


我在运行 Ubuntu 和 Java 8_181 的 AWS 服务器上遇到了同样的问题。它在半夜突然开始。顶部显示 2 个 CPU 已满载,就像您的一样。重新启动 Lucee/Tomcat 并重新启动没有效果。

Fusionreactor 指出了调度任务的问题,其中线程可视化器显示了两个旋转任务,堆栈跟踪类似于下面。

我杀死了这些线程,旋转停止了。然后我可以看到我的两个计划任务在 Lucee 管理员中被标记为粉红色的永久停止。重新启用这些进程并重新启动 Lucee 又带来了问题,所以我一次又一次地杀死它们,任务在 Lucee 管理员中变成粉红色。他们也没有按照正常的时间表运行。其他计划任务仍然运行正常,几个小时后一切正常。

然后我删除并重新创建了两个似乎是问题的计划任务,并重新启动了 Lucee。这两项任务如期进行。因此,我得出结论,不知何故,这两个任务的时间信息已经损坏,当 Lucee 试图计算下一个运行时间时,这会导致自旋。Luce 源代码似乎在旋转点附近有一个“while(1)”循环,它似乎在增加一个日期变量——我怀疑这就是问题所在。

总之,拍摄计划任务并重新创建,您可能有一个解决方法。

java.util.SimpleTimeZone.getOffsets(SimpleTimeZone.java:551) - 锁定 <0x5d7f0b89> (a java.util.SimpleTimeZone) 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)


推荐阅读