WebSphere®MessageBroker - DataFlowEngine进程 - 无法分配内存

时间:2013-08-26 01:46:32

标签: websphere ibm-mq mq messagebroker

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/
  4. 我们到目前为止尝试将jvmMaxHeapSize设置为1 GB,但这没有帮助.....在设置此值后在/ var / adm / log中生成的日志位于http://dpaste.com/1356210/

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

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

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

1 个答案:

答案 0 :(得分: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