mysql - Grails/Tomcat : Database connections get stuck in sleep state

标签 mysql tomcat grails

我有一个在 Tomcat 7 下运行的 Grails 应用程序,但在管理 MySQL 连接时遇到问题。

问题是对应用程序的每个新请求(即页面加载)都会创建一个新的 MySQL 连接,而这些连接不会关闭。相反,它们保持 sleep 状态,直到 MySQL 服务器最终拒绝接受更多连接。因此,只需快速重新加载站点上的各个页面,就可以创建大量数据库连接。

看来我的连接池没有足够快地关闭与 MySQL 的连接。连接池有很多配置设置,但我不确定需要调整什么来避免这个问题。

这是我的 context.xml 文件中的配置:

        <Resource name="jdbc/Production" auth="Container" type="javax.sql.DataSource"
            maxActive="100"
            maxIdle="30"
            maxWait="10000"
            minEvictableIdleTimeMillis="1800000"
            timeBetweenEvictionRunsMillis="1800000"
            numTestsPerEvictionRun="3"
            removeAbandoned="true"
            removeAbandonedTimeout="60"
            logAbandoned="true"
            testOnBorrow="true"
            testWhileIdle="true"
            testOnReturn="true"
            validationQuery="SELECT 1"
            username=""
            password=""
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost/Production"
    />

非常感谢您的任何建议。

最佳答案

您没有定义连接池。

在context.xml中添加如下代码(好像是JNDI数据源):

pooled = "true"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"

如果您还没有将 JDBC 池放入依赖项配置中,请将以下内容添加到 BuildConfig.groovy 中的 plugins 闭包中:

compile ":jdbc-pool:1.0.9.3"

您可以使用其他连接池,但我建议使用 JDBC 池。

关于mysql - Grails/Tomcat : Database connections get stuck in sleep state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15338902/

相关文章:

grails - 从现有数据库读取的Grails

unit-testing - 为什么添加grails服务单元测试会破坏 Controller 单元测试?

php - MySQL 如何避免来自 PHP 的重复条目

java - Request.getAttribute ("javax.servlet.request.X509Certificate") 返回 Null

mysql - 无法连接到 MySQL 的 Spring Boot 应用程序故障排除

tomcat - 登录管理我的应用时出现 401 未经授权

grails - 带复合键的Grails独立标准

python - django postgresql 查询不工作

php - 将 X 和 Y 插入尚不存在的 MySQL 数据库

mysql - 从sql中的表列中提取2个字母的大写子字符串