Websphere Message Broker 中的流程完成后不释放资源
Flow in Websphere Message Broker does not release resources after completion
对于一个项目,我在 Websphere Message Broker 7 中制作了多个消息流。
其中一个流程是一个相当复杂的流程,包含大量的数据库调用和转换。但是,根据需要执行的操作,它可以正确且快速地执行。
问题是,当它处于活动状态时,它会消耗越来越多的资源,直到代理耗尽内存。即使我使用一个小的测试用例并且它能够在它崩溃之前完成,资源也不会被释放。在这种情况下,我可以确认流程的输出(这很好),但操作报告它一直在消耗内存。
所以,我猜是内存泄漏。我不知道如何以及在哪里找到它。谁能指出我在哪里看的方向?
如果需要其他信息,请询问。由于它的大小,我不想将整个计算节点放在这个线程中。
即使在处理完成后,您的内存消耗仍然很高,这让我认为您的消息流具有某种状态,通过共享或静态变量存储在内存中。
您可能会在 ESQL 中的共享变量中保存大量数据,或者在流程中的 Java 中保存静态变量。
或者,如果您正在使用 JavaComputes,您可能会泄漏 ResultSets 等资源。
或者它可能是一些错误,您应该检查为 V7 发布的修复包中的已知和已修复的漏洞:
http://www-01.ibm.com/support/docview.wss?&uid=swg27019145
正如我在上面的评论中所述,DataFlowEngine 在完成后永远不会释放其资源。
这是 IBM 解释此事的主题(第 8 条):
http://www-01.ibm.com/support/docview.wss?uid=swg21665926#8
除此之外,真正的问题似乎是在循环中使用环境变量,这会消耗大量内存。使用后删除变量是我推荐的一个好习惯。
对于一个项目,我在 Websphere Message Broker 7 中制作了多个消息流。
其中一个流程是一个相当复杂的流程,包含大量的数据库调用和转换。但是,根据需要执行的操作,它可以正确且快速地执行。
问题是,当它处于活动状态时,它会消耗越来越多的资源,直到代理耗尽内存。即使我使用一个小的测试用例并且它能够在它崩溃之前完成,资源也不会被释放。在这种情况下,我可以确认流程的输出(这很好),但操作报告它一直在消耗内存。
所以,我猜是内存泄漏。我不知道如何以及在哪里找到它。谁能指出我在哪里看的方向?
如果需要其他信息,请询问。由于它的大小,我不想将整个计算节点放在这个线程中。
即使在处理完成后,您的内存消耗仍然很高,这让我认为您的消息流具有某种状态,通过共享或静态变量存储在内存中。 您可能会在 ESQL 中的共享变量中保存大量数据,或者在流程中的 Java 中保存静态变量。
或者,如果您正在使用 JavaComputes,您可能会泄漏 ResultSets 等资源。
或者它可能是一些错误,您应该检查为 V7 发布的修复包中的已知和已修复的漏洞: http://www-01.ibm.com/support/docview.wss?&uid=swg27019145
正如我在上面的评论中所述,DataFlowEngine 在完成后永远不会释放其资源。 这是 IBM 解释此事的主题(第 8 条): http://www-01.ibm.com/support/docview.wss?uid=swg21665926#8
除此之外,真正的问题似乎是在循环中使用环境变量,这会消耗大量内存。使用后删除变量是我推荐的一个好习惯。