1

我们目前在带有 SQL Server 2008 的 MVC3 网站上使用 Quartz.net v1.0.3.3。

该网站在 IIS7 上运行,我们将 Idle Timeout 属性设置为 0。我们还安装了 App Warmup Module。作为安全网,我们还设置了一个 Windows 计划任务,以每 5 分钟下载一个页面(使用 powershell 脚本)以确保站点处于唤醒状态,因为我们不确定应用程序预热模块是否正常工作。

我们有 13 个 cron 触发器分散在每天的不同时间点运行。有的每天开火一次,有的每小时开火,有的每 10/15 分钟开火一次(都很简单)。没有触发器使用与另一个相同的作业,因此每个作业都有自己的触发器,据我所知,阻塞不是问题。

我们记录每次作业开始和结束的时间,以及可能发生的任何异常。当作业运行时,没有人抛出异常,因此我们知道作业没有被触发,然后静默失败。

所有作业都运行。问题在于频率。昨天一个小时工(0 0 * * * ?)在早上 2、5、6 和 8 点运行,然后直到下午 3 点才再次运行。在此期间,其他不相关的作业运行,因此站点处于唤醒状态并触发触发器。

我们的 web.config 的石英部分如下(我已经删除了我们的连接字符串节点):

  <quartz>
    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
    <add key="quartz.threadPool.threadCount" value="25" />
    <add key="quartz.threadPool.threadPriority" value="Normal" />
    <add key="quartz.jobStore.misfireThreshold" value="60000" />
    <add key="quartz.jobStore.useProperties" value="true" />
    <add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
    <add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
    <add key="quartz.jobStore.tablePrefix" value="[qrtz]." />
    <add key="quartz.jobStore.dataSource" value="default" />
    <add key="quartz.dataSource.default.provider" value="SqlServer-20" />
    <add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />
    <add key="quartz.jobStore.acquireTriggersWithinLock" value="true" />
  </quartz>

我们最初将 ThreadPriority 设置为“Low”,将 ThreadCount 设置为 5,但后来将其提高到“Normal”,而 25 无济于事。

我意识到我们使用的是旧版本的quartz.net,但我们不希望升级,因为我们的数据库和我们所有的工作都是针对 v1.0 进行编码的,并且鉴于我们的时间限制,重新实现工作和数据库不是一个选项。

我已经搜索了互联网,虽然有很多问题是 cron 触发器没有触发,但我找不到任何解决零星或间歇性触发器的方法

非常感谢您阅读这个冗长的问题,并提前感谢您的帮助。

4

0 回答 0