【发布时间】:2011-04-11 20:59:07
【问题描述】:
我们正在 Tomcat 5.5 中运行经典的 spring/hibernate/mysql 堆栈。当尝试超时锁定表行时,有时我们会遇到死锁。引发某种死锁异常。
异常很清楚,堆栈跟踪表明出了什么问题。但它没有显示持有实际锁的另一个线程。除非我知道那根线在做什么,否则它只是大海捞针。
问题:有没有办法找到另一个线程?
谢谢!
一月
【问题讨论】:
-
异常从何而来——mysql?你能发布一个堆栈跟踪吗?
-
你怎么知道它只是另一个线程?死锁可能涉及一长串线程。
-
我当然不知道涉及的线程数。但应用是典型的“一个请求=一个线程”的情况。我们对线程不做任何事情。而且由于锁是独占的,所以当时只能有一个线程。
-
org.springframework.dao.CannotAcquireLockException:无法插入集合:[com.customer.Site.siteLayoutSettingsRaw#48112];嵌套异常是 org.hibernate.exception.LockAcquisitionException: could not insert collection: [com.customer.Site.siteLayoutSettingsRaw#48112] at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:633) at org.springframework .orm.hibernate3.AbstractSessionFactoryBean.convertHibernateAccessException(AbstractSessionFactoryBean.java:303)
-
引起:java.sql.BatchUpdateException:尝试获取锁时发现死锁;尝试在 com.mchange.v2.c3p0.impl.NewProxyPreparedStatement 的 com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1443) 的 com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1998) 重新启动事务。 executeBatch(NewProxyPreparedStatement.java:1723) 在 org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70) 在 org.hibernate.jdbc.BatchingBatcher.addToBatch(BatchingBatcher.java:56)
标签: java hibernate spring tomcat deadlock