Hi,
Servicemix 3.3 was released almost one year ago, after that, several
memory issues of cxf bc get fixed.
Could you test with the latest released fuse 3.4.0.4 [1](which is
based on apache servicemix 3.3 but released more recently)?
[1]http://repo.open.iona.com/maven2/org/apache/servicemix/apache-servicemix/3.4.0.4-fuse/
Freeman
On 2009-8-20, at 下午5:25, Sebastian Gomez wrote:
Hi everyone.
I'm using YourKit to monitor the memory usage in my application
running on
ServiceMix 3.3 because there seems to be some kind of memory leak that
finally ends up with a OutOfMemoryError due to the heap space. After
removing a few SUs from my SA, I've detected the one that grabs hold
of the
memory is cxf-bc. Playing around with the thread pools I've seen
that if I
reduce the number of threads of this component, the memory does not
seem to
run out. This makes me think that the threads are using up a lot of
memory
even though their job has already finished. I've run into the same
problem
using both ODE and EIP separately to control the flows, so I'm
leaving it to
ServiceMix to mark the exchanges as DONE, so I think it can't be the
typical
not-marking-the-exchanges-as-done error.
To support my idea:
I'm consuming two types of messages from a third party WS. The first
type is
a small message (approximately 2KB), while the second is quite large
(approx. 2MB). Both messages contain all their information in the
payload,
i.e. there are no attachments. If I download lots of the large
messages, the
heap is quickly used up. But if I download only some large ones (not
enough
to use up the whole heap, but most of it), and then I download lots
of the
small ones, the heap is freed. It looks like the threads in the pool
used to
download large files are being used to download the small ones so
they free
the memory they where using up for the large files. I'm not sure if
this
makes sense, but it's what I've noticed using YourKit.
I'd appreciate someone telling me if my assumption could be
possible. Has
someone tried downloading large payloads using cxf-bc? I see in
YourKit that
lots of Xerces DOM objects are being created, I'm worried that they
aren't
being freed once the thread has finished its job. Would it be
possible to
add an interceptor before cxf-bc consumes the message to convert it
into a
small payload with an attachment? This should prevent the
OutOfMemoryError,
shouldn't it?
Hope someone has read so far and is still willing to help. Thanks in
advance.
Sebastian Gomez.
--
Freeman Fang
------------------------
Open Source SOA: http://fusesource.com