Picture

linux内核tcp配置导致的web服务偶发无法访问

计算机网络

问题描述

一个web项目时有用户无法访问的情况,过一会又可以访问,这个问题困扰了很长一段时间,一直以为是DNS的问题。后来在看了一篇文章 “三次握手,四次挥手”https://www.cnblogs.com/qcrao-2018/p/10182185.html你真的懂吗? 看到关于 tcp的连接队列的时候,猛然意识到问题出在了哪, 遂连上服务器查看,果然linux的tcp配置有问题

# /etc/sysctl.conf

#表示开启重用。允许将TIME-WAIT sockets重新用于新的 TCP 连接,默认为 0 表示关闭
net.ipv4.tcp_tw_reuse = 1

#表示开启TCP连接中TIME-WAIT sockets的快速收回功能,默认为 0 ,表示关闭
net.ipv4.tcp_tw_recycle = 1

#当keepalive起用的时候,TCP发送keepalive消息的频度,缺省是2小时,改为20分钟。
#net.ipv4.tcp_keepalive_time = 120
#减少处于FIN-WAIT-2连接状态的时间,使系统可以处理更多的连接
#net.ipv4.tcp_fin_timeout = 30
#在内核放弃建立连接之前发送SYN包的数量

不知道是前人改了配置还是我自己改的,也许是我吧, 看了网上的 关于 tcp的性能调优可能就想当然的把 net.ipv4.tcp_tw_recycle = 1 这个参数配置进去了,实际上这是这个参数导致的网站,时有无法访问的情况。

注意

  • 以后还是要多注重原理,读懂读透文档,不要想到然的乱配置参数。