项目中连接池hirika 执行SQL超时15分钟
connection timeout设置成30s,但是超时了15分钟
可以确定连接被断开了,tcp再不断重传。因为被断开,statement开启的超时线程,是发送kill query命令到数据库,连接都断了,这个超时线程的作用没用,所以30s超时不起作用
真的要设置超时,应该要在jdbc url上设置socket timeout,但是设置太短会影响有些长时间的sql语句
默认sysctl_tcp_retries2=15,timeout=1023TCP_RTO_MIN+6*TCP_RTO_MAX=920.6s,约15分钟
防火墙会定时与不定时的删除 TCP 会话,在会话删除后,Java服务器使用连接池的连接发送数据库查询请求,过程如下:
重试次数和超时时间对应关系
调整/proc/sys/net/ipv4/tcp_retries2 参数来减少重试次数,当网络环境较好时,可以减少到 5~6 次。
https://blog.csdn.net/u014155356/article/details/82865451
https://www.jianshu.com/p/29ea5ed5cb9f