有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

集群配置中quartz的java奇怪行为

我正在开发定期服务

该应用程序是使用JDK 1.6、Spring Framework 2.5.6和Quartz 1.8.4开发的,用于调度作业

我有两台带有WebLogic Server 10.3.5的群集服务器

有时,石英石的生产进度似乎很疯狂。分析发生这种情况的条件,集群服务器之间似乎存在一个大于1秒的时钟“去同步”。然而,这种去同步并不总是由于服务器的系统时间,有时似乎即使机器的时钟是同步的,JVM也会引入一点“延迟”

有人遇到过同样的问题吗?有办法解决吗

提前谢谢


共 (3) 个答案

  1. # 1 楼答案

    这个问题几乎总是归因于时钟偏移。即使您认为NTPd设置正确,但仍可能发生以下几件事:

    • 我们认为NTPd工作正常(并且配置正确),但在AWS上,防火墙阻止了NTP端口。UDP 123。再说一遍,这不是TCP,而是UDP
    • 如果不经常同步,就会累积时钟偏差。许多主板上计时器的准确性是出了名的不稳定。因此,随着时间的推移(几天),你会突然发现这些石英错误。超过5分钟,就会出现很多安全错误,比如Kerberos

    所以这个故事的寓意是与NTPd同步,但要经常这样做,并验证它是否真的有效

  2. # 2 楼答案

    我使用的是Quartz 2.2.1,每当发生群集恢复时,我都会注意到一个奇怪的行为

    例如,即使机器已与ntpdate服务同步,我在群集实例恢复时也会收到以下消息:

    组织。石英impl。jdbcjobstore。JobStoreSupport findFailedInstances“此计划程序实例()仍处于活动状态,但已由群集中的另一个实例恢复。这可能会导致不一致的行为”

    Here表示解决方案是:“同步所有集群节点上的时间,然后重新启动集群。消息不应再出现在日志中。”

    因为每台机器都是同步的,所以这个“延迟”可能是由JVM引入的??我不知道……:()

  3. # 3 楼答案

    在Oracle 2.2.1版上使用JDBC JobStore时,我遇到了同样的问题

    在我的例子中,我在一个节点上运行Quartz。然而,我注意到数据库机器与运行Quartz的节点没有时间同步

    我在数据库机器和运行Quartz的机器上都激活了ntpd,几分钟后问题就消失了