You failed to consume the response. Apache-HC will never return the
connection to the pool. Once you've hit the 500th thread all connections
are leased. In the run() method simply add a finally to your try/catch
and move the response object into scope.
HttpResponse response=null;
try {
response = client.execute(...);
}
catch() {
}
finally {
if(response != null) {
EntityUtils.consumeQuietly(response.getEntity());
}
}
‹
Pete
On 6/21/16, 7:42 AM, "Shawn Heisey" <[email protected]> wrote:
>At the paste URL below is the code I'm using in a test. The test is
>checking for race conditions in some server code I've written:
>
>http://apaste.info/Vs6
>
>This code will stop working correctly during the second loop. On the
>first loop, it creates 400 threads and requests the URL once in each
>thread. On the second loop, it tries to do it again, but hangs after
>the 100th thread is created. When I create the client, i set
>maxConnPerRoute to 500, so it is related to that. It seems that each
>connection isn't being removed from the internal tracking after it
>completes.
>
>If I move the httpclient creation inside the for loop and uncomment the
>"client.close();" at the end of the loop, then everything works ... but
>it seems like Ishould be able to use one client for this entire test.
>
>What have I done wrong in my code?
>
>threads is a Set<Thread>.
>firstFailedLoop and loopNum are AtomicInteger.
>numThreadsPerRun is set to 400.
>
>If anything in the code is unclear, please let me know what needs
>clarification.
>
>Thanks,
>Shawn
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [email protected]
>For additional commands, e-mail: [email protected]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]