Mysql 大量连接作为睡眠导致连接过多错误

Mysql 大量连接作为睡眠导致连接过多错误,mysql,tomcat,hikaricp,Mysql,Tomcat,Hikaricp,我实现了Hikari连接池 这是我对池的配置 config.setUsername("abc"); config.setPassword("abc"); config.addDataSourceProperty("maximumPoolSize", "10"); config.addDataSourceProperty("maxLifetime", "60"); config.addDataSourcePropert

我实现了Hikari连接池

这是我对池的配置

        config.setUsername("abc");
        config.setPassword("abc");
        config.addDataSourceProperty("maximumPoolSize", "10");
        config.addDataSourceProperty("maxLifetime", "60");
        config.addDataSourceProperty("cachePrepStmts", "true");
        config.addDataSourceProperty("prepStmtCacheSize", "250");
        config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
        ds = new HikariDataSource(config);
问题是,当我执行showProcessList时,在sleep命令下有大约150个连接的一批又一批

这会导致太多连接问题

我有两个web应用程序连接到此数据库,但即使我取消部署它们,也意味着没有web应用程序尝试连接到该数据库,我仍然看到允许的连接数已用尽


我已经彻底地讨论了类似的问题,因此,没有人能帮我解决问题。

严格地说,从高级通用故障排除的角度来看,您的应用程序可以选择CONNECTION_ID并记录对应于processlist中显示的ID的值,以帮助您了解池的工作方式。我怀疑你的代码泄露了连接,这可以解释这一点。可能类似于config.setLeakDetectionThreshold20000;此外,应通过config.setMaximumPoolSize10设置maximumPoolSize。maxLifetime应通过config.setMaxLifetime60*60*1000设置一小时。所有HikariCP时间和超时均以毫秒为单位。作为侧节点,maxLifetime为60秒会适得其反;我不建议任何小于5分钟的值。如果您想要更快的退出,以及一个最小大小的池,请使用minimumIdle和idleTimeout。为com.zaxxer.hikari启用调试级别日志记录。听起来你几乎在创建许多池——每个池将创建10个连接。调试日志记录将揭示是否是这种情况。我非常确定我使用的是单例连接,即整个项目的连接。我发现,当我从tomcat取消部署应用程序时,连接并没有关闭dunno why?,所以我在servlet的destroy方法下添加了一个HikariDataSource.close。这是一个好方法吗?@floftking9987 servlet是管理生命周期的错误位置。您应该实现一个ServletContextListener,与此答案中描述的类似:。如果您不使用JNDI,contextInitialized方法将是初始化数据库的好地方,而销毁显然位于contextDestroyed方法中。