You are viewing a plain text version of this content. The canonical link for it is here.
Posted to httpclient-users@hc.apache.org by Jaikit Savla <ja...@yahoo.com> on 2013/10/21 04:59:29 UTC

Java-level deadlock with HttpAsyncClient 4.0-beta4

Hello Mates,

I am stuck with deadlock in DefaultClientExchangeHandlerImpl. Code works fine with 4.0-beta3 version. Looked at Async code and I am assuming deadlock is because of incorrect callbacks returned while leasing connection. I am running with load of 180 rps. Connections per service is configured to 512. 

Anyone else hit this issue before ? Can this be a bug with new version or I am not using it correctly ? Appreciate any help or pointers.

httpclient jars in classpath:
httpcore-nio-4.3.jar
httpcore-4.3.jar
httpclient-4.3.jar
httpasyncclient-4.0-beta4.jar

Please find stack for 2 threads which are in deadlock.

Found one Java-level deadlock:
=============================
"ActiveMQ Session Task-15":
  waiting to lock monitor 0x00007fbde00016a0 (object 0x0000000225e00770, a org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl),
  which is held by "ActiveMQ Session Task-9"
"ActiveMQ Session Task-9":
  waiting to lock monitor 0x00007fbf2400d478 (object 0x0000000225e00810, a org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl),
  which is held by "ActiveMQ Session Task-15"

Java stack information for the threads listed above:
===================================================
"ActiveMQ Session Task-15":
        at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.connectionAllocated(DefaultClientExchangeHandlerImpl.java:266)
        - waiting to lock <0x0000000225e00770> (a org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl)
        at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.access$000(DefaultClientExchangeHandlerImpl.java:57)
        at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl$1.completed(DefaultClientExchangeHandlerImpl.java:333)
        at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl$1.completed(DefaultClientExchangeHandlerImpl.java:340)
        at org.apache.http.concurrent.BasicFuture.completed(BasicFuture.java:115)
        at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager$InternalPoolEntryCallback.completed(PoolingNHttpClientConnectionManager.java:439)
        at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager$InternalPoolEntryCallback.completed(PoolingNHttpClientConnectionManager.java:423)
        at org.apache.http.concurrent.BasicFuture.completed(BasicFuture.java:115)
        at org.apache.http.nio.pool.AbstractNIOConnPool.fireCallbacks(AbstractNIOConnPool.java:443)
        at org.apache.http.nio.pool.AbstractNIOConnPool.lease(AbstractNIOConnPool.java:276)
        at org.apache.http.nio.pool.AbstractNIOConnPool.lease(AbstractNIOConnPool.java:248)
        at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.requestConnection(PoolingNHttpClientConnectionManager.java:239)
        at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.requestConnection(DefaultClientExchangeHandlerImpl.java:326)
        at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.start(DefaultClientExchangeHandlerImpl.java:120)
        - locked <0x0000000225e00810> (a org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl)
        at org.apache.http.impl.nio.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:188)
        at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:63)
        at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:93)
        at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:78)
        at com.Sender.sendUpdate(Sender.java:68)
        at com.Consumer.onMessage(Consumer.java:97)
        at org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1321)
        - locked <0x000000022307e698> (a java.lang.Object)
        at org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:131)
        at org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:202)
        at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:129)
        at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:47)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:722)
"ActiveMQ Session Task-9":
        at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.connectionAllocated(DefaultClientExchangeHandlerImpl.java:266)
        - waiting to lock <0x0000000225e00810> (a org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl)
        at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.access$000(DefaultClientExchangeHandlerImpl.java:57)
        at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl$1.completed(DefaultClientExchangeHandlerImpl.java:333)
        at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl$1.completed(DefaultClientExchangeHandlerImpl.java:340)
        at org.apache.http.concurrent.BasicFuture.completed(BasicFuture.java:115)
        at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager$InternalPoolEntryCallback.completed(PoolingNHttpClientConnectionManager.java:439)
        at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager$InternalPoolEntryCallback.completed(PoolingNHttpClientConnectionManager.java:423)
        at org.apache.http.concurrent.BasicFuture.completed(BasicFuture.java:115)
        at org.apache.http.nio.pool.AbstractNIOConnPool.fireCallbacks(AbstractNIOConnPool.java:443)
        at org.apache.http.nio.pool.AbstractNIOConnPool.lease(AbstractNIOConnPool.java:276)
        at org.apache.http.nio.pool.AbstractNIOConnPool.lease(AbstractNIOConnPool.java:248)
        at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.requestConnection(PoolingNHttpClientConnectionManager.java:239)
        at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.requestConnection(DefaultClientExchangeHandlerImpl.java:326)
        at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.start(DefaultClientExchangeHandlerImpl.java:120)
        - locked <0x0000000225e00770> (a org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl)
        at org.apache.http.impl.nio.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:188)
        at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:63)
        at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:93)
        at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:78)
        at com.Sender.sendUpdate(Sender.java:68)
        at com.Consumer.onMessage(Consumer.java:97)
        at org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1321)
        - locked <0x0000000222f57100> (a java.lang.Object)
        at org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:131)
        at org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:202)
        at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:129)
        at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:47)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:722)

--jaikit

Re: Java-level deadlock with HttpAsyncClient 4.0-beta4

Posted by Oleg Kalnichevski <ol...@apache.org>.
On Sun, 2013-10-20 at 19:59 -0700, Jaikit Savla wrote:
> Hello Mates,
> 
> I am stuck with deadlock in DefaultClientExchangeHandlerImpl. Code works fine with 4.0-beta3 version. Looked at Async code and I am assuming deadlock is because of incorrect callbacks returned while leasing connection. I am running with load of 180 rps. Connections per service is configured to 512. 
> 
> Anyone else hit this issue before ? Can this be a bug with new version or I am not using it correctly ? Appreciate any help or pointers.
> 
> httpclient jars in classpath:
> httpcore-nio-4.3.jar
> httpcore-4.3.jar
> httpclient-4.3.jar
> httpasyncclient-4.0-beta4.jar
> 
> Please find stack for 2 threads which are in deadlock.
> 

I think it is the same issue as HTTPASYNC-59 [1]

Please re-test your aplication against the latest SVN snapshot.

Oleg

[1] https://issues.apache.org/jira/browse/HTTPASYNC-59



---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org