生产环境线程死锁,请问这是什么原因导致的,如何解决?
<2023-10-31 下午10时54分19秒 CST> <Critical> <WebLogicServer> <BEA-000394> <
DEADLOCK DETECTED:
==================
[deadlocked thread] QuartzScheduler_scheduler-localhost.localdomain1698650301518_ClusterManager:
-----------------------------------------------------------------------------------------------
Thread 'QuartzScheduler_scheduler-localhost.localdomain1698650301518_ClusterManager' is waiting to acquire lock 'org.apache.commons.dbcp.AbandonedObjectPool@5176ade8' that is held by thread 'Timer-2'
Stack trace:
------------
org.apache.commons.pool.impl.GenericObjectPool.addObjectToPool(GenericObjectPool.java:1136)
org.apache.commons.pool.impl.GenericObjectPool.returnObject(GenericObjectPool.java:1076)
org.apache.commons.dbcp.AbandonedObjectPool.returnObject(AbandonedObjectPool.java:100)
org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:80)
org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:180)
org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:333)
org.springframework.jdbc.datasource.DataSourceUtils.releaseConnection(DataSourceUtils.java:294)
org.springframework.scheduling.quartz.LocalDataSourceJobStore.closeConnection(LocalDataSourceJobStore.java:158)
org.quartz.impl.jdbcjobstore.JobStoreSupport.cleanupConnection(JobStoreSupport.java:3603)
org.quartz.impl.jdbcjobstore.JobStoreSupport.doCheckin(JobStoreSupport.java:3286)
org.quartz.impl.jdbcjobstore.JobStoreSupport$ClusterManager.manage(JobStoreSupport.java:3870)
org.quartz.impl.jdbcjobstore.JobStoreSupport$ClusterManager.run(JobStoreSupport.java:3907)
[deadlocked thread] Timer-2:
---------------------------
Thread 'Timer-2' is waiting to acquire lock 'org.apache.commons.dbcp.PoolableConnection@6c5b68ac' that is held by thread 'QuartzScheduler_scheduler-localhost.localdomain1698650301518_ClusterManager'
Stack trace:
------------
org.apache.commons.dbcp.AbandonedTrace.addTrace(AbandonedTrace.java:172)
org.apache.commons.dbcp.AbandonedTrace.init(AbandonedTrace.java:89)
org.apache.commons.dbcp.AbandonedTrace.<init>(AbandonedTrace.java:79)
org.apache.commons.dbcp.DelegatingStatement.<init>(DelegatingStatement.java:60)
org.apache.commons.dbcp.DelegatingConnection.createStatement(DelegatingConnection.java:161)
org.apache.commons.dbcp.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:327)
org.apache.commons.dbcp.PoolableConnectionFactory.validateObject(PoolableConnectionFactory.java:308)
org.apache.commons.pool.impl.GenericObjectPool.evict(GenericObjectPool.java:1217)
org.apache.commons.pool.impl.GenericObjectPool$Evictor.run(GenericObjectPool.java:1341)
java.util.TimerThread.mainLoop(Timer.java:512)
java.util.TimerThread.run(Timer.java:462)
>
<2023-10-31 下午10时54分19秒 CST> <Critical> <Health> <BEA-310006> <Critical Subsystem core has failed. Setting server state to FAILED.
Reason: Thread deadlock detected>
<2023-10-31 下午10时54分19秒 CST> <Critical> <WebLogicServer> <BEA-000385> <Server health failed. Reason: health of critical service 'core' failed>
<2023-10-31 下午10时54分19秒 CST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to FAILED>
<2023-10-31 下午10时54分19秒 CST> <Error> <> <BEA-000000> <THREAD DUMP from JVM taken at 'Tue Oct 31 22:54:19 2023'
2023-10-31 22:54:19
Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.10-b01 mixed mode):
"MultiThreadedHttpConnectionManager cleanup" daemon prio=10 tid=0x00007fb4e410d000 nid=0x14734 in Object.wait() [0x00007fb405cb8000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x0000000629963418> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
- locked <0x0000000629963418> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ReferenceQueueThread.run(MultiThreadedHttpConnectionManager.java:1122)