Hikari CP SSL 异常在接收对等方的 close_notify 之前关闭入站

Dav*_*vid 5 mysql spring-jdbc spring-boot hikaricp amazon-aurora

自从从 Tomcat CP(默认为 spring boot 1)切换到 Hikari(默认为 spring boot 2)后,我们开始看到许多实例:

EXCEPTION STACK TRACE:



** BEGIN NESTED EXCEPTION ** 

javax.net.ssl.SSLException
MESSAGE: closing inbound before receiving peer's close_notify

STACKTRACE:

javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:129)
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:255)
    at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:645)
    at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:624)
    at com.mysql.cj.protocol.a.NativeProtocol.quit(NativeProtocol.java:1312)
    at com.mysql.cj.NativeSession.quit(NativeSession.java:182)
    at com.mysql.cj.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:1750)
    at com.mysql.cj.jdbc.ConnectionImpl.close(ConnectionImpl.java:720)
    at com.zaxxer.hikari.pool.PoolBase.quietlyCloseConnection(PoolBase.java:135)
    at com.zaxxer.hikari.pool.HikariPool.lambda$closeConnection$1(HikariPool.java:441)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)
Run Code Online (Sandbox Code Playgroud)

环境

  • Spring Boot 2.1.1.RELEASE
  • 爪哇 11
  • mysql-connector-java 8.0.13
  • HikariCP 3.2.0

数据库:

  • RDS Aurora MySql 5.7.12(默认参数组)

配置(Spring Boot)

设置:

spring.datasource.hikari.transactionIsolation=TRANSACTION_REPEATABLE_READ

spring.datasource.hikari.minimumIdle=10

spring.datasource.hikari.idleTimeout=300000
spring.datasource.hikari.maximumPoolSize=20

spring.datasource.hikari.connectionTimeout=5000

spring.datasource.hikari.maxLifetime=900000
spring.datasource.hikari.validationTimeout=1000
Run Code Online (Sandbox Code Playgroud)

是否有我遗漏的设置,也许我的空闲时间应该设置得低得多?

我们(还)没有遇到任何明显的不良副作用,即应用程序似乎可以继续运行而没有问题,但此堆栈跟踪经常出现(可能每 4 秒出现一次)。

数据库设置

如果我通过 cli 连接到 mysql 并运行show variables;和 grep 获取超时相关值,我会看到:

| connect_timeout                                          | 10                                                                                                                                                                                                                                                                                                                                                                                                               |
| delayed_insert_timeout                                   | 300                                                                                                                                                                                                                                                                                                                                                                                                              |
| have_statement_timeout                                   | YES                                                                                                                                                                                                                                                                                                                                                                                                              |
| innodb_flush_log_at_timeout                              | 1                                                                                                                                                                                                                                                                                                                                                                                                                |
| innodb_lock_wait_timeout                                 | 50                                                                                                                                                                                                                                                                                                                                                                                                               |
| innodb_rollback_on_timeout                               | OFF                                                                                                                                                                                                                                                                                                                                                                                                              |
| interactive_timeout                                      | 28800                                                                                                                                                                                                                                                                                                                                                                                                            |
| lock_wait_timeout                                        | 31536000                                                                                                                                                                                                                                                                                                                                                                                                         |
| net_read_timeout                                         | 30                                                                                                                                                                                                                                                                                                                                                                                                               |
| net_write_timeout                                        | 60                                                                                                                                                                                                                                                                                                                                                                                                               |
| rpl_stop_slave_timeout                                   | 31536000                                                                                                                                                                                                                                                                                                                                                                                                         |
| slave_net_timeout                                        | 60                                                                                                                                                                                                                                                                                                                                                                                                               |
| wait_timeout                                             | 28800                                                                                                                                                                                                                                                                                                                                                                                                            |
Run Code Online (Sandbox Code Playgroud)