【问题标题】:Flow in Websphere Message Broker does not release resources after completionWebsphere Message Broker 中的流在完成后不释放资源
【发布时间】:2026-02-06 17:05:01
【问题描述】:

对于一个项目,我在 Websphere Message Broker 7 中创建了多个消息流。 其中一个流程是一个相当复杂的流程,其中包含大量数据库调用和转换。但是,考虑到它需要做的事情,它可以正确且相当快地执行。
问题在于,当它处于活动状态时,它会消耗越来越多的资源,直到代理内存耗尽。即使我使用一个小测试用例并且它能够在它崩溃之前完成,资源也不会被释放。在这种情况下,我可以确认流的输出(这很好),但操作报告说它一直在消耗内存。
所以,我猜是内存泄漏。我不知道如何以及在哪里找到它。任何人都可以指出我在哪里看的方向吗?

如果需要更多信息,请询问。由于它的大小,我不希望将整个计算节点放在这个线程中。

【问题讨论】:

    标签: messagebroker


    【解决方案1】:

    即使在处理完成后您的内存消耗也很高,这让我认为您的消息流具有某种状态,即通过共享或静态变量存储在内存中。 您可能会将大量数据保存在 ESQL 中的共享变量中,或者在您的流程中保存 Java 中的静态变量中。

    或者,如果您使用的是 JavaComputes,您可能会泄漏 ResultSets 等资源。

    或者它可能是一些错误,您应该检查为 V7 发布的修复包中的已知和已修复的泄漏: http://www-01.ibm.com/support/docview.wss?&uid=swg27019145

    【讨论】:

    • 感谢您的回答。我发现流程完成后不会释放他们使用的内存。这是 IBM 内置的东西,因此以后的处理可以使用内存,而无需每次都要求更多。但是,我的问题似乎是由一些存储过多数据的环境变量引起的。显然,您需要在完成后从环境中显式删除数据,以取回资源。这和其他一些清理有助于并将使用量从 >20GB 减少到大约 400MB。
    【解决方案2】:

    正如我在上面的评论中所述,DataFlowEngine 在完成后永远不会释放其资源。 这是 IBM 解释此事的线索(第 8 条): http://www-01.ibm.com/support/docview.wss?uid=swg21665926#8

    除此之外,真正的问题似乎是在循环中使用环境变量,这会消耗大量内存。使用后删除变量是我推荐的好习惯。

    【讨论】: