记录一次现场com.mongodb.MongoSocketOpenException: Exception opening socket的问题排查与解决方案

记录一次现场com.mongodb.MongoSocketOpenException: Exception opening socket的问题排查与解决方案

问题发现

快下班时,现场运维同事发现日志有很多如下报错,并请求协助排查解决
日志部分截图如下:
日志内容基本是上述片段的重复

问题排查

查看日志,发现部分DB连接超时

  1. 利用谷歌翻译,得到部分消息:连接池后台维护任务期间引发WARN异常
  2. 联系运维同事,让查看 MongoDB集群各分片的状态。因为VPN被其他同时占用,所以需要等待一段时间,同事告诉说DB应该是正常的。但是根据日志中有正常的业务日志判断,应该是有一个分片出问题了。
  3. 期间自行百度发现一些相似错误(大多数都是说bind_ip和配置连接的ip有问题,显然不是这个问题),其中有一个比较类似的说是因为连接数过多,导致time_wait超时。因为现场用户有300W,所以觉得这个比较合理。该文章链接为 https://www.jianshu.com/p/ece233d2c601。
  4. 联想到MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0/dbcp 连接池则以为该被断开的连接依然有效。在这种情况下,如果客户端代码向c3p0/dbcp 连接池请求连接的话,连接池就会把已经失效的连接返回给客户端,客户端在使用该失效连接的时候即抛出异常。
  5. 当正准备测试time_wait时,前方同事告诉有一个分片的mongos服务挂掉了。(证明前面的判断是对的)

问题解决

1.让同事将挂掉的mongos服务重启,报错消失。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值