0

WebSphere Message Broker DataFlowEngine 进程异常结束并出现错误Failed to allocate memory

当传入的 XML 消息大约为 12 Mb 时,就会发生这种情况。

还注意到类似的传入 XML 消息但大小为 10 Mb 不会导致此问题。

我附上了处理此消息时生成的 .abend 日志文件的 3 个示例。他们在

  1. http://dpaste.com/1356207/
  2. http://dpaste.com/1356208/
  3. http://dpaste.com/1356209/

到目前为止,我们已经尝试将 jvmMaxHeapSize 设置为 1 GB,但这并没有帮助.....设置此值后在 /var/adm/log 中生成的日志位于http://dpaste.com/1356210/

DataFlowEngine 进程的大小在异常结束之前增加了很多。我能够通过 NMON 实用程序看到它达到 1.2 GB 的大小。

我们还尝试MQSI_FREE_MASTER_PARSERS=1根据我在 Google 上找到的一些链接设置变量,但它也没有帮助。

我们还能做些什么来找到这个问题的根源?

4

1 回答 1

1

DFE 进程正在尝试分配更多内存,以便为 ESQL 计算节点中的树副本目标创建语法元素。

最可能的解释是,您正在复制一棵巨大的树,而 DFE 需要的内存超出了它为处理消息所允许分配的内存。

值得牢记的是,除了存储在代理必须存储的每个元素中的比特流之外,XML 输入文件的大小可能比仅存储一份表示文档的语法树副本所需的大小小很多倍指向父元素和子元素、类型数据和结构数据的指针。

此外,需要为您所做的每个树副本存储此类数据,这意味着即使是小的 XML 输入文档,如果处理不当也可能需要大量内存来处理。

从您的异常结束来看,我会说您的流程在如下所示的部分末尾失败:

MQInput 节点 -> 计算节点 -> Try/CatchNode -> 计算节点 -> 计算节点 -> 计算节点

对于不需要的树副本,我会从最右边开始查看您的所有计算节点。还值得查看以下信息中心主题,该主题提供了有关如何使用引用变量来减少在 ESQL 中处理重复结构时所需的存储量的提示:

http://publib.boulder.ibm.com/infocenter/wmbhelp/v8r0m0/topic/com.ibm.etools.mft.doc/ac67176_.htm http://publib.boulder.ibm.com/infocenter/wmbhelp/v8r0m0 /topic/com.ibm.etools.mft.doc/bc23802_.htm

于 2013-08-29T12:16:56.000 回答