【问题标题】:Domino Java Agent running longer than maximum server execution time - looking for 'Terminate' eventDomino Java Agent 运行时间超过最大服务器执行时间 - 寻找“终止”事件
【发布时间】:2014-05-13 23:55:27
【问题描述】:

我正在对一个 domino java 代理进行压力测试,该代理可能会修改许多数据库中的许多文档。我正在使用庞大的数据库对代理进行负载测试,代理管理器正在关闭我的代理,因为它们的持续时间比服务器文档“Max LotusScript/Java 执行时间:”中指定的输入长。

我知道我可以编写一个程序文档让代理在没有任何时间的情况下运行,但我不想这样做,因为你失去了代理的句柄。

我知道我需要对代理进行编程,以便我可以将“任务”文档(其中包含代理的所有指令)保存为“未完成”状态,以便我可以从我停止的地方开始。

编写 LotusScript 代理时,有可能在代理的“终止”事件中编写清理代码,而我的 java 代理缺少此选项。

目前我最好的想法是在我的配置中设置一个“超时”字段,该字段将填充一个小于服务器截止时间的值。然而,这意味着我会定期问一个问题“我还有时间开始下一个行动吗?”我认为这会影响性能。

您对此案例的最佳实践有何经验?

【问题讨论】:

  • 这个项目的管理员很保守,我希望代理成为 nsf 的一部分。但作为最后的手段,我可​​以考虑。也想过做一个 Domino 服务器任务,但出于同样的原因拒绝了。无论如何都干杯。
  • 尝试将protected void finalize() 方法添加到您的代理类。不确定它是否会起作用,但值得一试。从理论上讲,当对象超出范围(即可用于垃圾收集)时,JVM 会调用 finalize(),但此时它是否真的能够做任何事情是个大问题。
  • 嗯,Richard,实际上并不能保证 finalize 会运行(在任何 java 环境中都是如此),所以我不太热衷于使用它。
  • 这是真的,这是有风险的,这就是为什么我从来没有尝试过 ;-) 当然,也不能保证计时器会命中,因为服务器挂起或崩溃可能防止这种情况发生。

标签: java lotus-domino


【解决方案1】:

除了 DOTS 和 Java 应用程序方法之外,还有其他两种选择。

选项 1: 您希望在此处使用程序文档,并且仍然有一些可见性以与您的代理进行交互。

在您的代码中添加检查以检查磁盘上的文件或文档字段。如果文件在那里,或者设置了字段,那么告诉您的应用程序开始清理。

检查文档的开销比检查磁盘上的文件要多。

选项 2:您可以使用 java.util.Timer 对象。

ServerMaximumTimeout - X minute/s 执行此设置。在计时器代码中抛出 TimeoutException。让您的主代码捕获此异常并进行清理。

然后在你的 finally 块中清理计时器对象,如果它还没有死。

another question 中的更多详细信息。

【讨论】:

  • 亲爱的西蒙,谢谢您的回答。我不理解选项 1;哪个进程(我假设会进行某种时间比较)实际上正在写入文件?
  • 确认!这是按比例缩小的较大编辑的一部分。选项 1 与计划文件有关,与 AMGR 无关。这是一种杀死你不可见的特工的方法。
猜你喜欢
  • 2016-02-21
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 2017-11-08
  • 2017-03-13
  • 1970-01-01
  • 2020-04-29
相关资源
最近更新 更多