1 原由
用的是mysql, mysql是直接使用阿里云服务器, 不是内网。 若是4分钟左右不用,再次操做时就会很慢,但只会慢这一次,接下来又正常了,若是继续一段时间不用,再次操做时又会慢一次。mysql
2 形成影响
- 2.1 影响开发心情, 隔4分钟左右, 再次操做, 用客户端工具会卡主。
- 2.2 影响开发效率, 数据库链接池中全部链接都出现No operations allowed after connection closed
3 排查
- 3.1 排查数据库, 查询mysql, wait_timeout:28800, 暂时排除
- 3.2 排查代码, 数据库相关的一些time设置, 网上推荐的。 暂时排除
- 3.3 排查网络
4 重点排除网络方面
工具方面 使用是Navicat Dbeaver idea自带的, 都有问题, 排查工具影响
4.1 防火墙方面, 已经关闭了本地和服务器的防火墙。
4.2 查看双方tcp链接状态
本地tcp是establish状态sql
5分钟后查看服务器tcp状态, 个人数据库是3303端口的, 查看公网ip数据库
查看tcp状态windows
总结: 若是是本地或服务器tcp状态是close状态, 就能肯定是哪一方出现问题bash
4.3 wireshark查看
出现不少, 通常为5次, tcp retransmission, 系统默认服务器
tcp retransmission是由于没有收到阿里服务器的ack确认
4.4 服务器使用tcpdump 进行抓包
正常执行sql语句,是能够抓到包, 可是5分钟后, 执行客户端工具,没监听到任何数据。网络
总结: 到此得出, tcp的包中传输过程当中丢失了, 基于对网络传输方面知识的匮乏, 首先只能排查是否公司网络影响, 让组员会家里测试, 本身也回宿舍测试了一下。 仍是存在问题, 因此首先排查公司网络的问题。app
4.5 暂时解决
考虑到是是本地windows环境, tcpRetransmission默认是5次, 并随着每次重传而增长一倍。 tcpRetransmission是为了保证数据传输的可靠性,但本着是本身电脑,而且是开发环境因此, 修改了次数。tcp
打开注册表 regedit HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters 右键新建DWORD 名称:TcpMaxDataRetransmissions 值为:1或2
5 问题加深
过几天,组员发觉数据链接不上, 做为组长, 我必需要解决这个问题。 首先我用其余阿里云服务器登录mysql, 发现登录正常。 其次我跑的其余小组, 让他们用电脑试一下, 竟然是能够的。 原本想试着mysql, 可是怕重启就能够了, 重现不了场景。 因此再一次进行排查。 折腾了好久, 最后修改了端口3303, 才能正常链接上。 因为公司有多台阿里云, 而且部署在上面的mysql, 在那段时间内, 都链接不上,而后其余组又能够链接的上, 因此认为是公司网络的缘由, 但因为折腾了几个小时, 又能链接的上了, 因此打算下次重现联系公司网关协助排查。ide
6 最终解决-Redis又出幺蛾子
过几天Redis又忽然链接不上了, 本着是忽然链接不上, 而后其余小组又能正常链接。 联系公司综合部, 让综合部去找人看看网络,但因为网关有事, 暂时来不了, 只能暂时本身折腾。 忽然想到, 上次全部部署在阿里上的数据库, 都不能链接, 只有一个部署在腾讯云的服务器能够链接, 会不会是阿里云限制了, 因此马上登录阿里云, 将本地公网ip加入白名单。 忽然就能连上了。
7 总结
将ip加入白名单, 以前数据库几分钟不执行语句就断开的问题也解决了。 世界都清净了。 折腾这么久的问题也解决了。 happy ending 可是仍是与疑惑, 首先隔壁小组都是用同样的网络, 公网ip也是同样的, 为何他们就能够链接。 这是我有疑惑的, 难道是对咱们mac地址作了记录限制了吗, 其次阿里云对咱们的限制, 为何没有想关的通告。 致使了花费了这么多时间。