在 Linux 系统中,清理网络连接 backlog(积压队列)通常涉及调整内核参数或重启相关服务。以下是几种常见方法:
sysctl net.core.somaxconn
# 或
cat /proc/sys/net/core/somaxconn
默认值通常较小(如 128),若连接请求超过此值,新连接会被丢弃。
sudo sysctl -w net.core.somaxconn=1024
此命令立即生效,但重启后失效。
编辑 /etc/sysctl.conf
文件:
sudo echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf
sudo sysctl -p # 应用配置
某些服务(如 Nginx、Apache)有独立的 backlog
参数,需在配置文件中修改:
- Nginx:调整 listen
指令的 backlog
参数:
nginx
listen 80 backlog=2048;
- Python Socket:在代码中设置:
python
socket.listen(2048)
bash
sudo systemctl restart nginx # 以 Nginx 为例
ss
或 netstat
查看连接状态:
bash
ss -lnt # 查看监听队列
netstat -s | grep "listen queue" # 统计溢出连接数
如果 listen queue
溢出次数较多,需增大 somaxconn
:
netstat -s | grep overflowed
参数 | 作用 | 建议值 |
---|---|---|
net.core.somaxconn |
系统级最大 backlog 限制 | 1024+(根据负载调整) |
net.ipv4.tcp_max_syn_backlog |
SYN 队列长度 | 2048+ |
服务特定配置(如 Nginx) | 应用级 backlog | 需与 somaxconn 匹配 |
ulimit
、文件描述符限制等一起优化。根据实际场景选择合适方法,优先调整服务配置和内核参数。