mysql 的连接10来分钟左右自动断开

mysql 的连接10来分钟左右自动断开

测试环境

CentOS 6.5
Mysql 5.7

问题描述

项目启动,第一次连接成功初始化连接池,连接无问题,无任何操作大概10几分钟的样子,连接池的连接全部失效,

报异常:

Connection is not available, request timed out after 30034ms.
No operations allowed after connection closed.

mysql 查看进程 SHOW PROCESSLIST 初始化的10个连接全部处于sleep状态(因为未到wait_time,所以没释放),

但是hikaricp 连接不上初始化时创建的那10个连接

在本地虚拟机安装mysql,局域网内测试,却不会出现此问题,猜测是否为路由器的某些原因直接断掉了?

下图为内网环境,60秒前的为初始化连接时收发的包,1692秒后的为无操作之后重新进行操作收发的包,内网无异常

相关配置

mysql 的 wait_timeout 默认值8小时

hikaricp 配置 maxLifetime: 5400000,其余保持默认(官方推荐配置是比 wait_timeout 少几秒钟,试过了,与此值在此问题上无差异),默认最大10个连接,最小与最大默认相同,即为固定连接数的连接池

另外,尝试过配置 maxLifetime: 540000,异常就不出现了,但是9分钟太短了,不配合更改wati_timeout的话,会导致mysql有非常多sleep的连接。

解决方法

配置/etc/sysctl.conf 如下:
net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_time = 300
然后执行 sysctl -p

net.ipv4.tcp_keepalive_time,这个值并非一成不变,一个内网环境通过端口映射的服务器,本地服务器最多设置为120秒,云服务器的则可以300

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值