nf_conntrack: table full, dropping packet引发接口504 gateway time-out 线上问题排查经历

眼瞅着马上到18点了,小编今天约了媳妇下班一起去美食街探店,谁曾想半路上公司故障群亮起了一片红灯,心里嘀咕着是谁这么不醒目,无奈之下只能抛妻急忙赶回公司处理问题了!
在这里插入图片描述
好了,废话少说,直接看问题,客户端反馈接口请求报大量504 gateway time-out 的网络请求错误,当遇到这个问题我得第一想法肯定是服务器压力过大了,所以我从以下几点一一做了排查:

  • 检查服务cpu、内存、磁盘等基础指标,好家伙,看起来没有什么异常指标,先排除了首要机器压力问题
  • 检查带宽、连接数 相关指标后,发现带宽接近瓶颈,连接数有点超,初步判断是服务器压力开始上来了
  • 确定了带宽,连接数异常后,一般压力会来到会来到接口服务这层来,由于前面接了一层nginx,按道理来说只要nginx错误日志开起来后,应该会有相关504错误体现,但是发现nginx并没有相关错误日志
  • nginx没有相关错误日志一下子让我不知所措,所以我直接执行了top命令,发现并没有有哪个服务压力很高的情况
  • 既然没有到这一层,那么只有两种假设,一种是没有到服务器这边,另外一种是进了服务器,但是没有到nginx这一层
  • 然后就查看了下系统日志,执行了下以下命令查看系统日志 tail -f /var/log/message,发现输出错误,错误如下:kernel: nf_conntrack: table full, dropping packet

好家伙看到这个错误信息,大概应该就是原因导致的,大概的意思就是服务器丢包了,然后科学上网查了下具体的原因,具体的原因是:
iptables 中的连接跟踪模块将连接存储在 conntrack 表中。table full, dropping packet表示表已满,无法为新连接创建新条目。结果,发生丢包。这个问题可以通过增加跟踪连接的允许条目数来解决。
具体的解决方案:

sudo sysctl -w net.netfilter.nf_conntrack_max=1048576
sudo sysctl -w net.nf_conntrack_max=1048576
sudo sysctl -p

改完配置后,服务再也没有丢包了!回家吃饭,oh yeah~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的goer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值