首页 > 解决方案 > 意外的 MySql PoolExhaustedException

问题描述

我在 AWS 上运行两个 EC2 实例来为我的应用程序提供一个服务。默认情况下,每个应用程序最多可以打开 100 个到 MySql 的连接。对于数据库,我使用 RDS 和 t2.medium 实例,它们一次可以处理 312 个连接。

一般来说,我的连接大小不会超过 20。当我开始向用户发送通知以访问应用程序时,连接大小会增加很多(这是预期的。)。在某些情况下,MySql 连接意外增加,我的应用程序开始抛出PoolExhaustedException

PoolExhaustedException: [pool-7-thread-92] Timeout: Pool empty. Unable to fetch a connection in 30 seconds, none available[size:100; busy:100; idle:0; lastwait:30000].

当我从 Navicat 检查数据库连接时,我看到大约有 200 个连接,而且它们都在休眠。我不明白为什么不使用打开的连接。我使用标准 Spring Data Jpa 来保存和读取我的实体,这意味着我不会手动打开或关闭连接。

除非我关闭其中一个实例并释放 mysql 连接,否则两个实例都没有响应。

您可以在此处查看 mysql 连接大小变化图形,并在此处查看一段日志。

标签: mysqlamazon-ec2spring-data-jpadatabase-connectionamazon-rds

解决方案


推荐阅读