java app, thread hangs after killing MySQL connection -


i have worker threads running, mysql , mysql-connector-java-5.1.20. when kill sql statement ( using kill "connection id" mysql client), java thread hangs, should throw exception.

jstack prints:

    "quartzbase$child#45e3dd3c_worker-3" prio=10 tid=0x00007f960004c800 nid=0x713d runnable [0x00007f943b3a0000]    java.lang.thread.state: runnable         @ java.net.plainsocketimpl.socketavailable(native method)         @ java.net.plainsocketimpl.available(plainsocketimpl.java:472)         - locked <0x00007f9e11fe13a8> (a java.net.sockssocketimpl)         @ java.net.socketinputstream.available(socketinputstream.java:217)         @ com.mysql.jdbc.util.readaheadinputstream.available(readaheadinputstream.java:232)         @ com.mysql.jdbc.mysqlio.clearinputstream(mysqlio.java:981)         @ com.mysql.jdbc.mysqlio.sendcommand(mysqlio.java:2426)         @ com.mysql.jdbc.mysqlio.sqlquerydirect(mysqlio.java:2651)         @ com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2677)         - locked <0x00007f9e17de2b50> (a com.mysql.jdbc.jdbc4connection)         @ com.mysql.jdbc.connectionimpl.rollbacknochecks(connectionimpl.java:4863)         @ com.mysql.jdbc.connectionimpl.rollback(connectionimpl.java:4749)         - locked <0x00007f9e17de2b50> (a com.mysql.jdbc.jdbc4connection)         @ org.apache.commons.dbcp.delegatingconnection.rollback(delegatingconnection.java:368)         @ org.apache.commons.dbcp.poolingdatasource$poolguardconnectionwrapper.rollback(poolingdatasource.java:323)         @ org.hibernate.transaction.jdbctransaction.rollbackandresetautocommit(jdbctransaction.java:217)         @ org.hibernate.transaction.jdbctransaction.rollback(jdbctransaction.java:196)         @ org.springframework.orm.hibernate3.hibernatetransactionmanager.dorollback(hibernatetransactionmanager.java:676)         @ org.springframework.transaction.support.abstractplatformtransactionmanager.processrollback(abstractplatformtransactionmanager.java:845)         @ org.springframework.transaction.support.abstractplatformtransactionmanager.rollback(abstractplatformtransactionmanager.java:822)         @ org.springframework.transaction.interceptor.transactionaspectsupport.completetransactionafterthrowing(transactionaspectsupport.java:430)         @ org.springframework.transaction.interceptor.transactioninterceptor.invoke(transactioninterceptor.java:112)         @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:172)         @ org.springframework.aop.framework.jdkdynamicaopproxy.invoke(jdkdynamicaopproxy.java:202)         @ $proxy1021.process(unknown source) 

using jvmtop, saw this:

jvmtop 0.8.0 alpha - 22:48:37,  amd64, 24 cpus, linux 2.6.32-35, load avg 11.53  http://code.google.com/p/jvmtop   profiling pid 27403: com.caucho.server.resin.resin --root-dir     36.41% (     0.22s) com.mysql.jdbc.util.readaheadinputstream.available()   33.42% (     0.20s) ....opensymphony.xwork2.conversion.impl.defaulttypeconve()   30.17% (     0.18s) com.mysql.jdbc.util.readaheadinputstream.fill()    0.00% (     0.00s) com.rabbitmq.client.impl.frame.readfrom() 

the worker threads never accept new tasks.

any idea?

according mysql documentation "kill connection thread_id" should terminate connection associated given thread_id. looks not happening (in case java thread wait answer forever). maybe can verify connection closed using network tool (e.g. netstat) .

i've ran hanging mysql connections before , had resort using sockettimeout jdbc connection parameter (but careful: sockettimeout needs larger time takes complete longest running query). try use querytimeout prepared statement.


Comments

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

c++ - Clear the memory after returning a vector in a function -

erlang - Saving a digraph to mnesia is hindered because of its side-effects -