I tested DefaultHttpAsyncClient on performing instantly growing number of
requests per minute. It works pretty well before it reaches some point,
after which client changes behavior. Number of requests executed per minute
dramatically decrease, and average response time grow up. In Statistics.txt
- number of requests executed and average response time with discretization
15 sec. It seems that after some point (after 19:38:30 in Statistics.txt)
new requests are not submitted, and only old request continue execution.
(AsyncClientTest/out/artifacts/AsyncClient_jar/AsyncClient.jar 12000 32000
80000 150000 180000 300000 400000 ) - jar with command line params - number
of requests per minute to execute.

 Also after reaching peek state I start getting
LoggingClientProtocolHandlerException - see stackTrace in
AsyncClientErrorLog.txt

 I have written own AsyncHttp client based on http.nio package using
DefaultConnectingIOReactor, decorators to NHttpClientHandler,
NHttpRequestExecutionHandler - for managing and reusing opened connections
- but it behaved the same way. (Results on puncherChart.png) on the chart
there are few params shown with discretization 15 seconds - green - number
of requests executed, red - average response time (between
connection.requestOutput() method and received response, sky-blue - number
of requests that failed to execute because of connection being
closed).Horizontal axis represents timeline, Left vertical axis - values of
these charts. I monitored state of my machine using vmstat and it shows for
first 10 minutes 4-10 % CPU, 35-40 after. This was tested on m1.small
amazon instance. With c1.medium (which has 4 times more computation CPU
power) it works the same, but with upper bound of 16000 requests per 15
seconds (against 5000 on weaker machine) - therefore it is not networking
problem.

I noticed , that asking DefaultConnectiongIOReactor for big amount of
connection can cause instant reduce of its performance ( time for opening
new connections increase very much) - therefore in my http client I limited
the number of concurrent SessionRequest for connections. Maybe for this
reason  my client acts little more adequately in this case.

Please help to figure out, how to improve AsyncClients performance.

https://sourceforge.net/projects/asyncclienttest/files/ - here there are
project and files i have mentioned

Reply via email to