Java 明显死锁使用JPA2.0和Hibernate为未分配的挂起任务创建紧急线程

Java 明显死锁使用JPA2.0和Hibernate为未分配的挂起任务创建紧急线程,java,hibernate,tomcat,jpa,Java,Hibernate,Tomcat,Jpa,1) 我们使用的是JPA2.0和Hibernate4.2,我们最初使用Hibernate默认连接池实现数据库连接。我们认为这是outofmemory错误的问题,并且我们还在日志中看到Hibernate内置连接池(不用于生产!) java.lang.OutOfMemoryError: Java heap space 2) 所以实现的C3P0连接池请参见下面的persistence.xml文件,以及tomcat服务中设置JAVA_选项的更改 From - JAVA_OPTS="-Xms256m -

1) 我们使用的是JPA2.0和Hibernate4.2,我们最初使用Hibernate默认连接池实现数据库连接。我们认为这是outofmemory错误的问题,并且我们还在日志中看到Hibernate内置连接池(不用于生产!)

java.lang.OutOfMemoryError: Java heap space
2) 所以实现的C3P0连接池请参见下面的persistence.xml文件,以及tomcat服务中设置JAVA_选项的更改

From - JAVA_OPTS="-Xms256m -Xmx2048m -XX:PermSize=1024m -XX:MaxPermSize=1024m"
To – JAVA_OPTS="-Xmx2G -Xms1G -XX:NewSize=500m -XX:MaxPermSize=500m -XX:CMSInitiatingOccupancyFraction=40"

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="pub-test" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<property name="javax.persistence.jdbc.url"
value="jdbc:informix-sqli://fddb.fd.gtwy.dcn:7101/fd_test:INFORMIXSERVER=fd_ecf" />
<property name="javax.persistence.jdbc.user" value="dcapps" />
<property name="javax.persistence.jdbc.password" value="*****" />
<property name="javax.persistence.jdbc.driver" value="com.informix.jdbc.IfxDriver" />
<property name="hibernate.dialect" value="org.hibernate.dialect.InformixDialect" />
<property name="hibernate.connection.provider_class" value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider" />
<property name="hibernate.c3p0.max_size" value="1000" />
<property name="hibernate.c3p0.min_size" value="30" />
<property name="hibernate.c3p0.acquire_increment" value="1" />
<property name="hibernate.c3p0.acquireRetryAttempts" value="60"/>
<property name="hibernate.c3p0.idle_test_period" value="30" />
<property name="hibernate.c3p0.max_statements" value="0" />
<property name="hibernate.c3p0.timeout" value="100" />
<property name="hibernate.auto_close_session" value="false"/>
<property name="hibernate.c3p0.breakAfterAcquireFailure" value="false"/>
<property name="hibernate.c3p0.numHelperThreads" value="3"/>
<property name="hibernate.c3p0.testConnectionOnCheckin" value="true"/>
6) 为了解决这个问题,我们使用了Google帮助,并向persistence.xml添加了属性,但我仍然看到相同的异常

We have Set this to zero
<property name="hibernate.c3p0.max_statements" value="0" />

Added these properties
<property name="hibernate.auto_close_session" value="false"/>
<property name="hibernate.c3p0.acquireRetryAttempts" value="60"/>
我们已将其设置为零
添加了这些属性
2013-11-25 16:39:12 WARN  ThreadPoolAsynchronousRunner:608 - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@2bb8cbc9 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
2013-11-25 16:39:12 WARN  ThreadPoolAsynchronousRunner:624 - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@2bb8cbc9 -- APPARENT DEADLOCK!!! Complete Status:
        Managed Threads: 3
        Active Threads: 3
        Active Tasks:
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@714b0f8b (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2)
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@76e9a8c8 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0)
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@66481f75 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1)
        Pending Tasks:
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@9096ec9
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@4a4852c1
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@52312300
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@17f0ff28
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@4effa75f
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@7245767d
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@2e664327
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@3bc2cd3d
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@72307e71
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@4dbd6748
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@4dc7cfd7
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@791e5425
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@36268742
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1b7a19d4
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@6d35bb63
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@62a19898
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@5f2955be
Pool thread stack traces:
We have Set this to zero
<property name="hibernate.c3p0.max_statements" value="0" />

Added these properties
<property name="hibernate.auto_close_session" value="false"/>
<property name="hibernate.c3p0.acquireRetryAttempts" value="60"/>