我已经构建了一个 springboot-2.1.2.RELEASE 应用程序。在应用程序中使用了 spring-boot-starter-data-jpa-2.1.2.RELEASE,默认情况下使用 hikaricp。已添加以下属性
spring.datasource.username=${DB_USERNAME:root}
spring.datasource.password=${DB_PASSWORD:notarealpassword}
spring.datasource.driver-class-name=${DB_DRIVER_CLASS_NAME:com.mysql.jdbc.Driver}
spring.datasource.validationQuery=${DB_VALIDATION_QUERY:SELECT 1}
spring.datasource.hikari.connection-test-query=${DB_CONN_TEST_QUERY:SELECT 1}
spring.jpa.show-sql=${DB_SHOWSQL:false}
spring.jpa.format-sql=${DB_FORMATSQL:false}
spring.jpa.properties.hibernate.dialect=${DB_HIBERNATE_DIALECT:org.hibernate.dialect.MySQL5Dialect}
spring.datasource.hikari.connectionTimeout=${HIKARI_CONN_TIMEOUT:30000}
spring.datasource.hikari.idleTimeout=${HIKARI_IDLE_TIMEOUT:600000}
spring.datasource.hikari.maxLifetime=${HIKARI_MAX_LIFETIME:1800000}
我已经在公司的 kubernetes 集群中部署了我的应用程序。对于数据库,该应用程序连接 aws RDS。启动我的应用程序后,数据库连接数突然增加。我无法 RCA 数据库连接泄漏。
PFA 连接峰值的屏幕截图 数据库连接峰值
在达到某个阈值后,我必须停止应用程序,但我无法调试原因。即使应用程序尚未使用,也会发生这种情况。应用程序启动 5 分钟后,这种情况开始发生。除了上述设置之外,是否还需要为 hikari 设置其他属性。我应该如何调试此问题。
答案1
限制应用程序每个实例将尝试维持的数据库连接。
如果可以,请在部署新版本的应用程序服务器后重新启动应用程序服务器。
限制 AWS RDS 实例上的连接外部,从不同的系统到应用程序服务器和数据库本身,使用例如 AWS Lambda 设备来终止过多的空闲连接。
- 然后,您可以使用同一设备来终止从应用程序服务器运行的过长寿命的查询(如果适用的话)(很可能是的)。