freeeyes 发表于 2014-3-5 14:07:23

关于大量短链的内核参数优化

客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端 口号,所以新的连接没办法绑定端口,即“Cannot assign requested address”。是客户端的问题不是服务器端的问题。通过netstat,的确看到很多TIME_WAIT状态的连接。
从网上找了解决办法:
执行命令修改如下2个内核参数
sysctl -w net.ipv4.tcp_timestamps=1开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置不起作用
sysctl -w net.ipv4.tcp_tw_recycle=1表示开启TCP连接中TIME-WAIT sockets的快速回收

有关内核级别的keepalive和time_wait的优化调整 vi /etc/sysctl net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_keepalive_time = 1800 net.ipv4.tcp_fin_timeout = 30 net.core.netdev_max_backlog =8096 修改完记的使用sysctl -p 让它生效 以上参数的注解 /proc/sys/net/ipv4/tcp_tw_reuse 该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。

修改内核参数,快速回收time_wait sockets:

# echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
# 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
# echo "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf
# 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
# sysctl -p

yunh 发表于 2014-3-5 14:27:52

      在什么地方看到过处理同样问题的不同方法,下面的链接可以参考一下:
http://www.acejoy.com/ace/thread-973-1-1.html

winston 发表于 2014-3-5 16:37:55

Linux的一大优势,就是可以根据自己的业务特点,进行针对性的配置。比起一般化的默认配置,可以非常有效的解决应用问题。
页: [1]
查看完整版本: 关于大量短链的内核参数优化