在 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、文件描述符限制等一起优化。根据实际场景选择合适方法,优先调整服务配置和内核参数。