do you have cxf-rt-transports-http-hc in your dependency?

I also saw a few difficulties in getting it work nicely when I was
pushing some high traffic a while ago.
I could get a higher throughput with the async-option but experienced
that the connection handling was sensitively influenced by the load.
I wanted to look into it sometime.

2014-12-03 10:28 GMT+01:00 user239 <[email protected]>:
> I was trying to see if there are any advantages of using the async transport
> over the regular sync http transport. So I wrote a small test program that
> makes 2000 concurrent requests. The server simply waits in a non-blocking
> fashion for 1-2 seconds and returns the response.
>
> I profiled it in Netbeans and the results were a bit surprising. Both
> transports completed all the requests in the same time (30-35 seconds) and
> used the same number of threads (around 30). But the async transport used
> 200 MB of memory, while the sync one didn't exceed 50 MB according to the VM
> Telemetry Overview.
>
> So I have a couple of questions:
> 1. Does this look like a memory issue with the async transport? Or is this
> by design?
> 2. In what scenario does the async transport clearly outperform the sync
> one? Looks like in the program I wrote it was the same and even consumed
> much more memory. Or maybe I need to tweak some server/client settings?
>
> I was thinking about using the async transport in a new project for better
> scalability, but after running these tests I'm not sure there are any
> benefits.
>
> My client code basically looks like this (I'm using CXF 3.0.2 and JDK 6):
>
>     MyService service = new MyService();
>
>     final int N = 2000;
>
>     final Date startTime = new Date();
>
>     final AtomicInteger runningRequestCount = new AtomicInteger(N);
>
>     final IMyService client = service.getBasicHttpBindingIMyService();
>
>     for (long i = 0; i < N; i++) {
>         client.TestMethodAsync(i, new AsyncHandler<TestMethodResponse>() {
>             @Override
>             public void handleResponse(Response<TestMethodResponse>
> response) {
>                 try {
>                     Result result = response.get().getTestMethodResult();
>
>                     // print some information from the "result"
>
>                     if (runningRequestCount.decrementAndGet() == 0) {
>                         Date endTime = new Date();
>
>                         Long elapsedTime = endTime.getTime() -
> startTime.getTime();
>
>                         System.out.println("All completed! Took " +
> elapsedTime + " milliseconds");
>
>                         System.exit(0);
>                     }
>                 } catch (InterruptedException ex) {
>
> Logger.getLogger(MyProgram.class.getName()).log(Level.SEVERE, null, ex);
>                 } catch (ExecutionException ex) {
>
> Logger.getLogger(MyProgram.class.getName()).log(Level.SEVERE, null, ex);
>                 }
>             }
>         });
>     }
>
>
>
> --
> View this message in context: 
> http://cxf.547215.n5.nabble.com/Async-transport-performance-using-cxf-rt-transports-http-hc-tp5751832.html
> Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to