自从将 Windows Domino 服务器从 8.5.3 升级到 9 以来,一个重要的代理在两周内两次出现运行时错误后无法启动。我们有 3 个代理管理器实例在白天(07:00 - 16:30)运行,5 个在夜间运行。有相当多的数据库的代理每 5 分钟运行一次,但大多数代理运行时间不到 1 秒。
这个重要的预定(每 5 分钟)LotusScript 代理运行 24 小时,达到时间限制后会重新启动(它大部分时间处于睡眠状态)。有时它会因运行时错误而停止。最后一次是昨天,它在 11:30 停止,直到今天 14:20 我禁用并启用代理后它才启动。
在启用/禁用之前,我检查了代理管理器的所有 3 个实例是否处于空闲状态,但由于某种原因,它们不再接收此代理。以下是禁用/启用之前的 Amgr 状态:
> Tell Amgr Status
29.07.2013 14:17:38 AMgr: Status report at '29.07.2013 14:17:38'
29.07.2013 14:17:38 Agent Manager has been running since '29.07.2013 14:05:27'
29.07.2013 14:17:38 There are currently '3' Agent Executives running
29.07.2013 14:17:38 There are currently '520' agents in the Scheduled Task Queue
29.07.2013 14:17:38 There are currently '100' agents in the Eligible Queue
29.07.2013 14:17:38 There are currently '1' databases containing agents triggered by new mail
29.07.2013 14:17:38 There are currently '1' agents in the New Mail Event Queue
29.07.2013 14:17:38 There are currently '0' databases containing agents triggered by document updates
29.07.2013 14:17:38 There are currently '0' agents in the Document Update Event Queue
29.07.2013 14:17:38 AMgr: Current control parameters in effect:
29.07.2013 14:17:38 AMgr: Daily agent cache refresh is performed at '04:15:00'
29.07.2013 14:17:38 AMgr: Currently in Daytime period
29.07.2013 14:17:38 AMgr: The maximum number of concurrently executing agents is '3'
29.07.2013 14:17:38 AMgr: The maximum number of minutes a LotusScript/Java agent is allowed to run is '1440'
29.07.2013 14:17:38 AMgr: Executive '1', total agent runs: 322855
29.07.2013 14:17:38 AMgr: Executive '1', total elapsed run time: 28064
29.07.2013 14:17:38 AMgr: Executive '2', total agent runs: 102967
29.07.2013 14:17:38 AMgr: Executive '2', total elapsed run time: 364127
29.07.2013 14:17:38 AMgr: Executive '3', total agent runs: 297064
29.07.2013 14:17:38 AMgr: Executive '3', total elapsed run time: 78582
合格代理商的最大数量似乎为 100,因为我总是得到 100。这是问题所在吗?如何增加最大值?
如果代理管理器在白天太忙(但似乎并非如此,因为当我查看时所有 3 个代理都处于空闲状态),我希望它至少在晚上有 5 个实例时启动代理。
有任何想法如何修复该问题,或者我是否应该将各种 AMgr 调试参数添加到 notes.ini 以便下次发生这种情况时获取更多信息。
发生最后一次情况后,我禁用了一些旧数据库中的代理,并将 AMgr 实例增加了 1。
我还使用一个简单的测试代理在不同的数据库中测试了运行时错误,但是在出现错误后它又重新启动了。
答案1
请注意,仅当同一数据库中没有其他计划代理同时运行时,计划代理才会运行。
例子。
Database A
- Agent X (Every 5 minutes)
- Agent Y (Every 10 minutes)
在这种情况下,X 将先运行,然后是 X 或 Y。如果 Y 运行,则 X 将错过其运行时间,并在有空闲时间时被添加到队列中以跟随 Y。
代理也不应该超出计划时间运行。因此,每 5 分钟运行一次的代理应该尽可能将工作时间控制在 1 分钟以内。
如果代理运行时间超过服务器允许的最大运行时间,代理将被终止。例外情况是代理正在调用第三方 DLL 并且出现挂起,或者您未扩展 NotesThread 并在 Java 代理中生成线程(可能存在其他情况,但这些是最常见的情况)。
由于这些因素,当所有内容都备份运行时,可能会有空闲的代理管理器。
要诊断问题,您可以使用代理管理器调试. 从 Domino 控制台:
set config DEBUG_THREADID=1
tell aMgr debug *
这将生成更详细的日志,以尝试诊断正在发生的事情。另外:
tell aMgr sched
将分解当前的时间表。
如果您有一个需要频繁执行的代理,则可以使用程序文档。缺点是如果代理挂起,您将无法终止代理。此外,您还需要知道它接触了什么,以防止与其他代理发生死锁。
对于 Domino 9,您可以使用 DOTS 进行基于服务器的调度代码(Java)。限制比 Amgr 少。