最近H2内存数据库在用户访问量增加的时候总是出现死锁的问题
用jstack 查看信息如下:
"pool-1-thread-13" prio=10 tid=0x00007fbb10012000 nid=0x3ba2 waiting for monitor entry [0x00007fbb49153000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.h2.engine.Engine.openSession(Engine.java:157)
- waiting to lock <0x00007fbbde7a2290> (a org.h2.engine.Engine)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:142)
at org.h2.engine.Engine.createSession(Engine.java:125)
at org.h2.engine.Engine.createSession(Engine.java:27)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:331)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:107)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:91)
at org.h2.Driver.connect(Driver.java:74)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:221)
at cn.shopex.service.crm.MemberSelectUtil.getH2Connection(Unknown Source)
at cn.shopex.service.crm.MemberSelectUtil.findMemberIdsByCustomGroup(Unknown Source)
at cn.shopex.service.crm.ReportZoomStatistics.wrap810008(Unknown Source)
at cn.shopex.service.crm.ReportZoomStatistics.wrapResult(Unknown Source)
at cn.shopex.service.crm.ReportZoomStatistics.handle(Unknown Source)
at cn.shopex.service.ServiceHandle.run(Unknown Source)
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)
"pool-1-thread-12" prio=10 tid=0x00007fbb10011000 nid=0x3ba1 waiting for monitor entry [0x00007fbb49254000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.h2.engine.Engine.openSession(Engine.java:157)
- waiting to lock <0x00007fbbde7a2290> (a org.h2.engine.Engine)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:142)
at org.h2.engine.Engine.createSession(Engine.java:125)
at org.h2.engine.Engine.createSession(Engine.java:27)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:331)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:107)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:91)
at org.h2.Driver.connect(Driver.java:74)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:221)
at cn.shopex.service.crm.MemberSelectUtil.getH2Connection(Unknown Source)
at cn.shopex.service.crm.MemberSelectUtil.findMemberIdsByCustomGroup(Unknown Source)
at cn.shopex.service.crm.ReportZoomStatistics.wrap810008(Unknown Source)
at cn.shopex.service.crm.ReportZoomStatistics.wrapResult(Unknown Source)
at cn.shopex.service.crm.ReportZoomStatistics.handle(Unknown Source)
at cn.shopex.service.ServiceHandle.run(Unknown Source)
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)
"pool-1-thread-11" prio=10 tid=0x00007fbb10010000 nid=0x3ba0 waiting for monitor entry [0x00007fbb499fe000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.h2.engine.Engine.openSession(Engine.java:157)
- waiting to lock <0x00007fbbde7a2290> (a org.h2.engine.Engine)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:142)
at org.h2.engine.Engine.createSession(Engine.java:125)
at org.h2.engine.Engine.createSession(Engine.java:27)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:331)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:107)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:91)
at org.h2.Driver.connect(Driver.java:74)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:221)
at cn.shopex.service.ServiceHandle.getH2Connection(Unknown Source)
at cn.shopex.service.crm.ReportStatistics.wrap800006(Unknown Source)
at cn.shopex.service.crm.ReportStatistics.wrapResult(Unknown Source)
at cn.shopex.service.crm.ReportStatistics.handle(Unknown Source)
at cn.shopex.service.ServiceHandle.run(Unknown Source)
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)
"pool-1-thread-10" prio=10 tid=0x00007fbb10022000 nid=0x3b9f waiting for monitor entry [0x00007fbb49e01000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.h2.engine.Engine.openSession(Engine.java:157)
- waiting to lock <0x00007fbbde7a2290> (a org.h2.engine.Engine)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:142)
at org.h2.engine.Engine.createSession(Engine.java:125)
at org.h2.engine.Engine.createSession(Engine.java:27)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:331)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:107)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:91)
at org.h2.Driver.connect(Driver.java:74)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:221)
at cn.shopex.service.crm.MemberSelectUtil.getH2Connection(Unknown Source)
at cn.shopex.service.crm.MemberSelectUtil.findMemberIdsByCustomGroup(Unknown Source)
at cn.shopex.service.crm.ReportZoomStatistics.wrap810008(Unknown Source)
at cn.shopex.service.crm.ReportZoomStatistics.wrapResult(Unknown Source)
at cn.shopex.service.crm.ReportZoomStatistics.handle(Unknown Source)
at cn.shopex.service.ServiceHandle.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)