0
votes

For a project I have made several message flows in Websphere Message Broker 7. One of these flows is quite a complicated flow with lots of database calls and transformations. However, it performs correctly and rather quickly given what it needs to do.
The problem is that while it is active, it consumes more and more resources, until the broker runs out of memory. Even if I use a small test case and it is able to complete before it crashes anything, the resources are not released. In this case, I can confirm the output of the flow (which is fine), but operations reported that it keeps consuming memory.
So, I guess a memory leak. I have no idea how and where to find it. Could anyone point me in a direction where to look?

If additional information is necessary, just ask. I would prefer not to put the entire compute node in this thread due to its size.

2

2 Answers

1
votes

That you are having high memory consumption even after the processing is done makes me think that your message flow has some kind of state, that is stored in memory via shared or static variables. You might be saving a lot of data in shared variables in ESQL, or static variables in Java in your flow.

Or if you are using JavaComputes, you might leak resources like ResultSets.

Or it could be some bug, you should check for known and fixed leaks in the fix packs issued for V7: http://www-01.ibm.com/support/docview.wss?&uid=swg27019145

0
votes

As stated in my comment above, a DataFlowEngine never releases its resources after completion. This is the thread of IBM explaining the matter (bullet 8): http://www-01.ibm.com/support/docview.wss?uid=swg21665926#8

Apart from that, the real issue seemed to be the use of Environment-variables inside a loop, which consumed a lot of memory. Deleting the variables after use is a good practice I can recommend.