检测并终止 JavaScript 活动中的无限循环

在 IBM Business Process Manager 应用程序内运行的 JavaScript 代码中可能出现无限循环。您可以在 100Custom.xml 文件中配置 JavaScript 循环检测参数来检测无限循环并选择性地终止这些无限循环。

当在 IBM BPM 应用程序内运行的 JavaScript 代码中出现无限循环时,这会影响其他资源。例如,Process Center 或 Process Server 线程将丢失直至服务器终止,这会影响服务器可用性。但是,识别哪个 JavaScript 活动正在循环可能会很难。

IBM BPM 监视每个脚本活动中执行的 JavaScript 指令数。JavaScript 运行时会向 IBM BPM 引擎通知指令计数器何时达到 IBM BPM 引擎设置的限制。达到指令计数器阈值后,IBM BPM 引擎会执行检查以查看已执行脚本活动的时间。

注:
如果 loop-detection-exception 参数设置为 false,那么会向 SystemOut.log 文件中写入以下某条消息:
  • CWLLG2261W: {0} 秒后在“未知”活动中怀疑存在无限循环。如果此脚本未循环,请增加 loop-detection-duration 属性。
  • CWLLG2263W: BPD“{2}”脚本活动“{3}”{0} 秒后在“{1}”中怀疑存在无限循环。如果此脚本未循环,请增加 loop-detection-duration 属性。
  • CWLLG2265W: {0} 秒后在服务“{1}”中怀疑存在无限循环。如果此服务未循环,请增加 loop-detection-duration 属性
如果 loop-detection-exception 参数设置为 true,那么会向 SystemOut.log 文件中写入以下某条消息:
  • CWLLG2262E: 终止“未知”活动 {0} 秒后检测到无限循环。如果此脚本未循环,请增加 loop-detection-duration 属性。
  • CWLLG2264E: 终止 BPD“{2}”脚本活动“{3}”{0} 秒后,在“{1}”中检测到无限循环。如果此脚本未循环,请增加 loop-detection-duration 属性。
  • CWLLG2266E: 终止服务“{1}”{0} 秒后检测到无限循环。如果此服务未循环,请增加 loop-detection-duration 属性。

如果超出 loop-detection-duration 参数指定的值,那么假设该活动处于无限循环中。缺省持续时间设置为 20 秒,但可进行配置(请参阅以下示例)。

缺省情况下,检测到无限循环时,IBM BPM 引擎会向 SystemOut.log 文件中写入一条警告,但脚本活动会继续运行。要将 IBM BPM 引擎配置为终止无限循环的脚本活动,请将 loop-detection-exception 参数设置为 true

100Custom.xml 文件中配置 JavaScript 循环检测参数,如下所示:
<common merge="mergeChildren">
  <javascript-engine>
    <loop-detection-duration>90</loop-detection-duration>            
    <loop-detection-exception>true</loop-detection-exception>
  </javascript-engine>
</common>