Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优。光TCP的调优参数就有50多个。在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数。在此分享出来,希望对大家有所帮助。
调优清单
好了,在这里先列出调优清单。请记住,这里只是笔者在内网进行TCP内核参数调优的经验,仅供参考。同时,笔者还会在余下的博客里面详细解释了为什么要进行这些调优!
序号 | 内核参数 | 值 | 备注 |
---|---|---|---|
1.1 | /proc/sys/net/ipv4/tcp_max_syn_backlog | 2048 | |
1.2 | /proc/sys/net/core/somaxconn | 2048 | |
1.3 | /proc/sys/net/ipv4/tcp_abort_on_overflow | 1 | |
2.1 | /proc/sys/net/ipv4/tcp_tw_recycle | 0 | NAT环境必须为0 |
2.2 | /proc/sys/net/ipv4/tcp_tw_reuse | 1 | |
3.1 | /proc/sys/net/ipv4/tcp_syn_retries | 3 | |
3.2 | /proc/sys/net/ipv4/tcp_retries2 | 5 | |
3.3 | /proc/sys/net/ipv4/tcp_slow_start_after_idle | 0 |
tcp_max_syn_backlog,somaxconn,tcp_abort_on_overflow
tcp_max_syn_backlog,somaxconn,tcp_abort_on_overflow这三个参数是关于
内核TCP连接缓冲队列的设置。如果应用层来不及将已经三次握手建立成功的TCP连接从队列中取出,溢出了这个缓冲队列(全连接队列)之后就会丢弃这个连接。如下图所示:
从而产生一些诡异的现象,这个现象诡异之处就在于,是在TCP第三次握手的时候丢弃连接
就如图中所示,第二次握手的SYNACK发送给client端了。所以就会出现client端认为连接成功,而Server端确已经丢弃了这个连接的现象!由于无法感知到Server已经丢弃了连接。
所以如果没有心跳的话,只有在发出第一个请求后,Serv