Atul Bisaria created CXF-6239:
---------------------------------
Summary: Out of memory when using Async connections in Apache CXF
Key: CXF-6239
URL: https://issues.apache.org/jira/browse/CXF-6239
Project: CXF
Issue Type: Bug
Components: Configuration, Transports
Affects Versions: 3.0.2
Reporter: Atul Bisaria
Priority: Critical
We are creating a webservice client using Apache CXF version 3.0.2. We are
using CXF's async based transport as described in
http://cxf.apache.org/docs/asynchronous-client-http-transport.html. Following
is the code snippet from our application:
---------------------------------------------------------------------------------------------
Client proxy = ClientProxy.getClient(tisInterface);
proxy.getBus().setProperty(AsyncHTTPConduitFactory.USE_POLICY,
UseAsyncPolicy.ALWAYS);
proxy.getBus().setProperty(AsyncHTTPConduitFactory.MAX_CONNECTIONS,
parConfig.getOnlineNotificationThreadCount());
HTTPConduit conduit = (HTTPConduit) proxy.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setReceiveTimeout(parConfig.getTimeout() * 1000);
conduit.setClient(httpClientPolicy);
------------------------------------------------------------------------------------------
With above configuration we are running a load of around 200 requests/second.
On running this load we observe on Java memory analyser tool JVisualVM that
heap size keeps on increasing continuously and after some time results in Java
out of memory error.
We have refactored our code to make sure that all the objects created by our
application are properly garbage collected. The heap dump generated from
JVisualVM shows that there are some classes used within Apache CXF library
which might be causing this issue.
Almost 94% of memory is retained by object of class
org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager
Is this an issue with the async transport provided by Apache CXF or we are
missing something in code or configuration?
Another observation is that when we use UseAsyncPolicy.NEVER instead of
UseAsyncPolicy.ALWAYS in above code, the out of memory problem does not occur,
but then the value set in AsyncHTTPConduitFactory.MAX_CONNECTIONS property does
not work.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)