【问题标题】:JBoss connection pool creating many connections to MySQLJBoss 连接池创建许多与 MySQL 的连接
【发布时间】:2011-03-18 14:46:15
【问题描述】:

我们正在使用 JBoss 4.2.2.GA / Hibernate 3.2.4.sp1 / SpringMVC 2.5 / MySQL 5.0.27 的设置。

下面是mysql-ds.xml文件:

<datasources>
  <local-tx-datasource>
    <jndi-name>myDS</jndi-name>
    <connection-url>jdbc:mysql://127.0.0.1:3306/database?zeroDateTimeBehavior=convertToNull&amp;useConfigs=maxPerformance</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>user</user-name>
    <password>password<password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <min-pool-size>5</min-pool-size>
    <max-pool-size>100</max-pool-size>
    <blocking-timeout-millis>30000</blocking-timeout-millis>
    <idle-timeout-minutes>1</idle-timeout-minutes>
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

查看 JMX-Console -> service=ManagedConnectionPool,我们使用的是JBossManagedConnectionPool

现在,问题是即使流量平庸(网站昨天吸引了大约 5000 次访问/15000 次页面浏览),MySQL 上仍有 96 个线程处于睡眠模式(使用show processlist)。

这些确实会减少时间,但我真正的问题是,为什么 jboss 创建这么多连接? MySQL 上的 MaxConnections = 250。

任何帮助表示赞赏!

【问题讨论】:

  • MySQL 刚刚由于“连接太多”而崩溃。现在这是高优先级,所以请提供任何帮助......另外,根据 Zoltan 的评论,管理我的会话不是连接池的工作吗?我还能如何重用连接?如果有帮助,我可以简要介绍一下代码是如何在我的应用程序中设置和使用的!!
  • 嗯到目前为止没有回复???我们需要尽快解决这个问题!!请帮助....

标签: java mysql jboss connection-pooling


【解决方案1】:

当我遇到这种情况时,问题是一些休眠会话没有关闭,这导致连接泄漏。检查您的会话关闭语句是否在 finally 块中。

【讨论】:

  • 感谢您的回复。是的,我们正在使用 try / catch / finally 块,例如... UserTransaction trans = nulltrans = transactionManager.getUserTransaction();trans.begin(); in try、trans.rollback() in catch 和 if (trans != null &amp;&amp; trans.getStatus() == Status.STATUS_ACTIVE) {try.commit();} in finally。
  • 顺便说一句.. 我们将 transactionManager 注入到我们所有的服务和 sessionFactory 到我们的 dao 中,但没有明确使用 session.flush() or session.close()
  • 如果 JBoss 管理连接,会话不会在任何情况下都关闭。见:community.jboss.org/wiki/sessionsandtransactions
  • 我向你保证,我们只使用sessionFactory.getCurrentSession() 而不是sessionFactory.openSession(),因此根据链接,会话应该会自动刷新和关闭!!
【解决方案2】:

经过大量分析,发现Hibernate在后端发出了太多查询来加载某些映射,因为mysqladmin status命令给出了500个查询/秒。

解决这个问题也应该解决这个问题。

感谢所有帮助过的人...

【讨论】:

    猜你喜欢
    • 2013-08-20
    • 1970-01-01
    • 2016-05-05
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多