Neo4j JDBCCypherExecutor is blocking thread

I am using neo4j 2.1.5

and using JDBCCypherExecutor

to post my cypher queries. often the cypher executor thread gets stuck making the application unusable after a while. The only option after a while is to restart the webapp spark.

Has anyone encountered this problem?

jstack of one of the blocked thread

"qtp1639509299-63" prio=10 tid=0x00007fe454001000 nid=0x1e0e waiting on condition [0x00007fe564fea000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x0000000586cf6e88> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
    at org.apache.http.impl.conn.tsccm.WaitingThread.await(WaitingThread.java:158)
    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:403)
    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:300)
    at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:224)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:391)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
    at org.restlet.ext.httpclient.internal.HttpMethodCall.sendRequest(HttpMethodCall.java:336)
    at org.restlet.engine.adapter.ClientAdapter.commit(ClientAdapter.java:114)
    at org.restlet.engine.adapter.HttpClientHelper.handle(HttpClientHelper.java:112)
    at org.restlet.Client.handle(Client.java:180)
    at org.restlet.routing.Filter.doHandle(Filter.java:159)
    at org.restlet.routing.Filter.handle(Filter.java:206)
    at org.restlet.resource.ClientResource.handle(ClientResource.java:1136)
    at org.restlet.resource.ClientResource.handleOutbound(ClientResource.java:1225)
    at org.restlet.resource.ClientResource.handle(ClientResource.java:1068)
    at org.restlet.resource.ClientResource.handle(ClientResource.java:1044)
    at org.restlet.resource.ClientResource.post(ClientResource.java:1453)
    at org.neo4j.jdbc.internal.rest.TransactionalQueryExecutor.post(TransactionalQueryExecutor.java:98)
    at org.neo4j.jdbc.internal.rest.TransactionalQueryExecutor.commit(TransactionalQueryExecutor.java:133)
    at org.neo4j.jdbc.internal.rest.TransactionalQueryExecutor.executeQueries(TransactionalQueryExecutor.java:204)
    at org.neo4j.jdbc.internal.rest.TransactionalQueryExecutor.executeQuery(TransactionalQueryExecutor.java:214)
    at org.neo4j.jdbc.internal.Neo4jConnection.executeQuery(Neo4jConnection.java:370)
    at org.neo4j.jdbc.internal.Neo4jPreparedStatement.executeQuery(Neo4jPreparedStatement.java:48)
    at com.zahoor.graph.executor.JdbcCypherExecutor.query(JdbcCypherExecutor.java:28)

      

+3


source to share


1 answer


Separate threads can spawn here because the JDBC driver maintains a thread transaction locally, so if you create new threads it creates new transaction objects and new connections (unless you reuse the same instance Connection

.



And the default pool for HttpClient is (afaik) 10 concurrent connections.

+1


source







All Articles