原理:linux如何处理新的tcp连接
- 触发时机: 客户端: 发起一个tcp连接(SYN);
服务端:
(相关参数: net.ipv4.tcp_max_syn_backlog
)
TCP模块查看max_syn_backlog
是否超阈值;
超阈值的话: 根据tcp_abort_on_overflow
是丢弃还是reset;
未超的话: 放到半连接队列;
- 触发时机: 客户端: 回复服务端ACK
服务端:
(相关参数:net.core.somaxconn
)
完全建立连接: 放到全连接队列;
内核调优
vim /etc/sysctl.conf
在末尾添加:
1 | net.core.somaxconn = 16384 # ESTABLISHED的连接队列最大 |
sysctl -p /etc/sysctl.conf
echo "1" > /proc/sys/net/ipv4/tcp_abort_on_overflow
# 满了以后显式发送RST包给客户端修改nginx配置
1
2
3listen 80 backlog=16384;
listen 443 backlog=16384;就是server里面的配置,在80 后面加上backlog=16384
cd tnginx_1_0_0-1.0/bin/nginx -s reload
重启api服务(如果有)
确认配置生效
ss -lnt
相关内核commit
since Linux 5.4 it was increased to 4096 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=19f92a030ca6d772ab44b22ee6a01378a8cb32d4
查看现有配置:
1 | sysctl -a | grep somaxconn |