Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-6239

Out of memory when using Async connections in Apache CXF

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Moderate

    Description

      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.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            dkulp Daniel Kulp
            atulb Atul Bisaria
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment