Saturday, 15 March 2014

java - APPARENT DEADLOCK Creating emergency threads for unassigned pending tasks -



java - APPARENT DEADLOCK Creating emergency threads for unassigned pending tasks -

i using mysql mybatis , greeting error on our live server

com.mchange.v2.async.threadpoolasynchronousrunner$deadlockdetector@6538f8f2 -- apparent deadlock!!! creating emergency threads unassigned pending tasks!

i don't understand why error coming because of c3p0 setting? c3p0 settings

----start updated-----

below spring-servlet.xml configuration

i updated datasource bean

<bean id="datasource" class="com.mchange.v2.c3p0.combopooleddatasource" destroy-method="close" p:driverclass="com.mysql.jdbc.driver" p:jdbcurl="jdbc:mysql://localhost/jdb" p:user="root" p:password="root" p:acquireincrement="10" p:idleconnectiontestperiod="60" p:maxpoolsize="100" p:maxstatements="0" p:minpoolsize="10" p:initialpoolsize="10" p:statementcachenumdeferredclosethreads="1" /> <!-- declare transaction manager --> <bean id="transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager" p:datasource-ref="datasource" /> <bean id="sqlsessionfactory" class="org.mybatis.spring.sqlsessionfactorybean"> <property name="datasource" ref="datasource" /> </bean> <!-- scan mappers , automatically scan whole classpath xmls --> <bean class="org.mybatis.spring.mapper.mapperscannerconfigurer"> <property name="sqlsessionfactory" ref="sqlsessionfactory" /> <property name="basepackage" value="com.mycom.myproject.db.mybatis.dao" /> </bean>

and dao class phone call mapper method

mydao.updaterecords()

this service class method

@override public list<userdetailedbean> selectallusersdetail(long groupid, list<long> ids) { list<userdetailedbean> usersdetaillist = null; seek { usersdetaillist = userdao.selectallusersdetail(groupid, ids); } grab (exception e) { e.printstacktrace(); } homecoming usersdetaillist; }

in dao class inject mapper.

@resource private usermapper usermapper; @override public list<userdetailedbean> selectallusersdetail(long groupid, list<long> ids) { homecoming usermapper.selectallusersdetail(groupid,ids); }

---end updated------

please allow me know if other info required.

this finish stack trace

[ warn] 2013-01-08 20:13:39 com.mchange.v2.async.threadpoolasynchronousrunner$deadlockdetector@70497e11 -- apparent deadlock!!! creating emergency threads unassigned pending tasks! [ warn] 2013-01-08 20:13:39 com.mchange.v2.async.threadpoolasynchronousrunner$deadlockdetector@70497e11 -- apparent deadlock!!! finish status: managed threads: 3 active threads: 3 active tasks: com.mchange.v2.resourcepool.basicresourcepool$asynctestidleresourcetask@2e81b8c5 (com.mchange.v2.async.threadpoolasynchronousrunner$poolthread-#0) com.mchange.v2.resourcepool.basicresourcepool$asynctestidleresourcetask@4689a55d (com.mchange.v2.async.threadpoolasynchronousrunner$poolthread-#2) com.mchange.v2.resourcepool.basicresourcepool$asynctestidleresourcetask@76c7a0d8 (com.mchange.v2.async.threadpoolasynchronousrunner$poolthread-#1) pending tasks: com.mchange.v2.resourcepool.basicresourcepool$asynctestidleresourcetask@2c1101d4 com.mchange.v2.resourcepool.basicresourcepool$asynctestidleresourcetask@108f1be6 com.mchange.v2.resourcepool.basicresourcepool$asynctestidleresourcetask@2370a188 com.mchange.v2.resourcepool.basicresourcepool$asynctestidleresourcetask@377cf9e5 com.mchange.v2.resourcepool.basicresourcepool$asynctestidleresourcetask@6dfa45d8 com.mchange.v2.resourcepool.basicresourcepool$asynctestidleresourcetask@49ffa050 com.mchange.v2.resourcepool.basicresourcepool$asynctestidleresourcetask@2d760a24 pool thread stack traces: thread[com.mchange.v2.async.threadpoolasynchronousrunner$poolthread-#0,5,main] java.net.socketinputstream.socketread0(native method) java.net.socketinputstream.read(socketinputstream.java:150) java.net.socketinputstream.read(socketinputstream.java:121) com.mysql.jdbc.util.readaheadinputstream.fill(readaheadinputstream.java:114) com.mysql.jdbc.util.readaheadinputstream.readfromunderlyingstreamifnecessary(readaheadinputstream.java:161) com.mysql.jdbc.util.readaheadinputstream.read(readaheadinputstream.java:189) com.mysql.jdbc.mysqlio.readfully(mysqlio.java:2549) com.mysql.jdbc.mysqlio.reuseandreadpacket(mysqlio.java:3002) com.mysql.jdbc.mysqlio.reuseandreadpacket(mysqlio.java:2991) com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:3532) com.mysql.jdbc.mysqlio.sendcommand(mysqlio.java:2002) com.mysql.jdbc.mysqlio.sqlquerydirect(mysqlio.java:2163) com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2618) com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2568) com.mysql.jdbc.statementimpl.executequery(statementimpl.java:1557) com.mysql.jdbc.databasemetadata$9.foreach(databasemetadata.java:4984) com.mysql.jdbc.iterateblock.doforall(iterateblock.java:51) com.mysql.jdbc.databasemetadata.gettables(databasemetadata.java:4962) com.mchange.v2.c3p0.impl.defaultconnectiontester.activecheckconnectionnoquery(defaultconnectiontester.java:185) com.mchange.v2.c3p0.impl.defaultconnectiontester.activecheckconnection(defaultconnectiontester.java:62) com.mchange.v2.c3p0.abstractconnectiontester.activecheckconnection(abstractconnectiontester.java:67) com.mchange.v2.c3p0.impl.c3p0pooledconnectionpool$1pooledconnectionresourcepoolmanager.testpooledconnection(c3p0pooledconnectionpool.java:368) com.mchange.v2.c3p0.impl.c3p0pooledconnectionpool$1pooledconnectionresourcepoolmanager.refurbishidleresource(c3p0pooledconnectionpool.java:310) com.mchange.v2.resourcepool.basicresourcepool$asynctestidleresourcetask.run(basicresourcepool.java:1999) com.mchange.v2.async.threadpoolasynchronousrunner$poolthread.run(threadpoolasynchronousrunner.java:547) thread[com.mchange.v2.async.threadpoolasynchronousrunner$poolthread-#2,5,main] java.net.socketinputstream.socketread0(native method) java.net.socketinputstream.read(socketinputstream.java:150) java.net.socketinputstream.read(socketinputstream.java:121) com.mysql.jdbc.util.readaheadinputstream.fill(readaheadinputstream.java:114) com.mysql.jdbc.util.readaheadinputstream.readfromunderlyingstreamifnecessary(readaheadinputstream.java:161) com.mysql.jdbc.util.readaheadinputstream.read(readaheadinputstream.java:189) com.mysql.jdbc.mysqlio.readfully(mysqlio.java:2549) com.mysql.jdbc.mysqlio.reuseandreadpacket(mysqlio.java:3002) com.mysql.jdbc.mysqlio.reuseandreadpacket(mysqlio.java:2991) com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:3532) com.mysql.jdbc.mysqlio.sendcommand(mysqlio.java:2002) com.mysql.jdbc.mysqlio.sqlquerydirect(mysqlio.java:2163) com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2618) com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2568) com.mysql.jdbc.statementimpl.executequery(statementimpl.java:1557) com.mysql.jdbc.databasemetadata$9.foreach(databasemetadata.java:4984) com.mysql.jdbc.iterateblock.doforall(iterateblock.java:51) com.mysql.jdbc.databasemetadata.gettables(databasemetadata.java:4962) com.mchange.v2.c3p0.impl.defaultconnectiontester.activecheckconnectionnoquery(defaultconnectiontester.java:185) com.mchange.v2.c3p0.impl.defaultconnectiontester.activecheckconnection(defaultconnectiontester.java:62) com.mchange.v2.c3p0.abstractconnectiontester.activecheckconnection(abstractconnectiontester.java:67) com.mchange.v2.c3p0.impl.c3p0pooledconnectionpool$1pooledconnectionresourcepoolmanager.testpooledconnection(c3p0pooledconnectionpool.java:368) com.mchange.v2.c3p0.impl.c3p0pooledconnectionpool$1pooledconnectionresourcepoolmanager.refurbishidleresource(c3p0pooledconnectionpool.java:310) com.mchange.v2.resourcepool.basicresourcepool$asynctestidleresourcetask.run(basicresourcepool.java:1999) com.mchange.v2.async.threadpoolasynchronousrunner$poolthread.run(threadpoolasynchronousrunner.java:547) thread[com.mchange.v2.async.threadpoolasynchronousrunner$poolthread-#1,5,main] java.net.socketinputstream.socketread0(native method) java.net.socketinputstream.read(socketinputstream.java:150) java.net.socketinputstream.read(socketinputstream.java:121) com.mysql.jdbc.util.readaheadinputstream.fill(readaheadinputstream.java:114) com.mysql.jdbc.util.readaheadinputstream.readfromunderlyingstreamifnecessary(readaheadinputstream.java:161) com.mysql.jdbc.util.readaheadinputstream.read(readaheadinputstream.java:189) com.mysql.jdbc.mysqlio.readfully(mysqlio.java:2549) com.mysql.jdbc.mysqlio.reuseandreadpacket(mysqlio.java:3002) com.mysql.jdbc.mysqlio.reuseandreadpacket(mysqlio.java:2991) com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:3532) com.mysql.jdbc.mysqlio.sendcommand(mysqlio.java:2002) com.mysql.jdbc.mysqlio.sqlquerydirect(mysqlio.java:2163) com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2618) com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2568) com.mysql.jdbc.statementimpl.executequery(statementimpl.java:1557) com.mysql.jdbc.databasemetadata$9.foreach(databasemetadata.java:4984) com.mysql.jdbc.iterateblock.doforall(iterateblock.java:51) com.mysql.jdbc.databasemetadata.gettables(databasemetadata.java:4962) com.mchange.v2.c3p0.impl.defaultconnectiontester.activecheckconnectionnoquery(defaultconnectiontester.java:185) com.mchange.v2.c3p0.impl.defaultconnectiontester.activecheckconnection(defaultconnectiontester.java:62) com.mchange.v2.c3p0.abstractconnectiontester.activecheckconnection(abstractconnectiontester.java:67) com.mchange.v2.c3p0.impl.c3p0pooledconnectionpool$1pooledconnectionresourcepoolmanager.testpooledconnection(c3p0pooledconnectionpool.java:368) com.mchange.v2.c3p0.impl.c3p0pooledconnectionpool$1pooledconnectionresourcepoolmanager.refurbishidleresource(c3p0pooledconnectionpool.java:310) com.mchange.v2.resourcepool.basicresourcepool$asynctestidleresourcetask.run(basicresourcepool.java:1999) com.mchange.v2.async.threadpoolasynchronousrunner$poolthread.run(threadpoolasynchronousrunner.java:547)

---updated----

when added p:statementcachenumdeferredclosethreads="1" datasouce bean getting below error

error creating bean name 'sqlsessionfactory' defined in servletcontext resource [/web-inf/spring-servlet.xml]: cannot resolve reference bean 'datasource' while setting bean property 'datasource'; nested exception org.springframework.beans.factory.beancreationexception: error creating bean name 'datasource' defined in servletcontext resource [/web-inf/spring-servlet.xml]: error setting property values; nested exception org.springframework.beans.notwritablepropertyexception: invalid property 'statementcachenumdeferredclosethreads' of bean class [com.mchange.v2.c3p0.combopooleddatasource]: bean property 'statementcachenumdeferredclosethreads' not writable or has invalid setter method. parameter type of setter match homecoming type of getter?

from http://www.mchange.com/projects/c3p0/#other_ds_configuration

numhelperthreads , maxadministrativetasktime help configure behavior of datasource thread pools. default, each datasource has 3 associated helper threads. if performance seems drag under heavy load, or if observe via jmx or direct inspection of pooleddatasource, number of "pending tasks" greater zero, seek increasing numhelperthreads. maxadministrativetasktime may useful users experiencing tasks hang indefinitely , "apparent deadlock" messages. (see appendix more.)

maxadministrativetasktime default: 0 seconds before c3p0's thread pool seek interrupt apparently hung task. useful. many of c3p0's functions not performed client threads, asynchronously internal thread pool. c3p0's asynchrony enhances client performance directly, , minimizes length of time critical locks held ensuring slow jdbc operations performed in non-lock-holding threads. if, however, of these tasks "hang", neither succeed nor fail exception prolonged period of time, c3p0's thread pool can become exhausted , administrative tasks backed up. if tasks slow, best way resolve problem increment number of threads, via numhelperthreads. if tasks hang indefinitely, can utilize parameter forcefulness phone call task thread's interrupt() method if task exceeds set time limit. [c3p0 recover hung tasks anyway signalling "apparent deadlock" (you'll see warning in logs), replacing thread pool task threads, , interrupt()ing original threads. letting pool go apparent deadlock , recover means periods, c3p0's performance impaired. if you're seeing these messages, increasing numhelperthreads , setting maxadministrativetasktime might help. maxadministrativetasktime should big plenty resonable effort acquire connection database, test connection, or 2 destroy connection, expected succeed or fail within time set. 0 (the default) means tasks never interrupted, best , safest policy under circumstances. if tasks slow, allocate more threads. if tasks hanging forever, seek figure out why, , maybe setting maxadministrativetasktime can help in meantime.

the default 3 numhelperthreads , increment 8-10 setting maxadministrativetasktime help

java mysql jdbc mybatis

No comments:

Post a Comment