【问题标题】:tomcat datasource with hibernate and Timeout waiting for idle object exception具有休眠和超时等待空闲对象异常的tomcat数据源
【发布时间】:2013-12-12 03:03:15
【问题描述】:

我正在使用 Tomcat 数据源和休眠

<Resource 
auth="Container" 
driverClassName="com.mysql.jdbc.Driver" 
maxActive="8" maxIdle="8" maxWait="10000"
username="*****"  
name="jdbc/sakila" password="*****"
type="javax.sql.DataSource" 
url="jdbc:mysql://localhost/sakila"/>

并处于休眠状态

<propertyname="hibernate.connection.datasource">java:comp/env/jdbc/sakila</property>

实施后我面临以下异常

java.util.NoSuchElementException: Timeout waiting for idle object

这个异常发生在晚上,当我睡​​觉的时候:),当我早上去办公室时,我发现了这个异常。我认为这是tomcat提供的连接池异常?

请更新我!

这个适合用tomcat Data-source with hibernate吗?或者我们应该使用 C3P0 第三方连接轮询?

目前正在寻找tomcate数据源的解决方案

【问题讨论】:

  • 您只允许 8 个同时连接到数据库。对于 Web 应用程序来说,这似乎很低。时机也很可疑。你有在半夜运行的任何后台进程吗?你能显示完整的堆栈跟踪吗?
  • @Olaf 半夜只有一个进程一次又一次地运行?一开始我们开始事务,最后我们提交事务并为异常回滚事务:) You allow only 8 simmultaneous connections to the database 它不会自动增加吗?
  • 在运行该夜间进程时是否失败?如果是这样,它第一次尝试在该进程中建立连接时会失败吗?该进程是否多次尝试建立连接?
  • 您能否提供服务器连接器的最大线程数作为与数据库最大数的比较?谢谢,

标签: java hibernate exception tomcat datasource


【解决方案1】:

连接池中的连接数会自动增长,直到达到 maxActive。

根据 Tomcat 文档,maxActive 是:

可以同时从此池中分配的最大活动连接数。默认值为 100

您将同时数据库连接的最大数量严格限制为 8。

我建议将此数字增加到至少 50。然后开始监视池中的连接数。如果连接数量稳定增长,而 Web 应用程序的使用量没有增长,则可能存在连接泄漏。如果您确认这一点,则必须调查该泄漏。

与“过去”不同,如果您通过 Hibernate 连接到数据容器并使用 Spring 等管理事务,则连接泄漏非常罕见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-29
    • 2015-07-11
    • 2013-12-22
    • 2011-11-08
    • 1970-01-01
    • 2014-04-04
    • 2011-04-11
    • 1970-01-01
    相关资源
    最近更新 更多