在 Debian 系统中,backlog 通常出现在两个层面:
下面分别说明如何“降低”或“缓解” backlog 问题。
listen(fd, backlog) 中的 backlognet.core.somaxconnnet.ipv4.tcp_max_syn_backlogsysctl net.core.somaxconn
sysctl net.ipv4.tcp_max_syn_backlog
# 临时
sysctl -w net.core.somaxconn=128
sysctl -w net.ipv4.tcp_max_syn_backlog=512
# 永久
echo "net.core.somaxconn=128" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog=512" >> /etc/sysctl.conf
sysctl -p
⚠️ 注意:
降低 backlog 会增加连接被丢弃的概率,只适合:
例如 Nginx:
listen 80 backlog=128;
否则应用层会覆盖内核限制。
如果 backlog 高是因为 SYN 多:
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_synack_retries=2
systemctl list-jobs
[Service]
TasksMax=100
或限制启动频率:
StartLimitIntervalSec=10
StartLimitBurst=5
| 场景 | 降低方式 |
|---|---|
| 打印队列 | lpstat -o / cancel -a |
| 邮件队列 | postqueue -p / postsuper -d ALL |
| 定时任务堆积 | 检查 cron / anacron 执行时间 |
请明确:
我可以给你更精准的调优方案。
如果你愿意,可以贴出:
ss -lnt
sysctl -a | grep backlog
systemctl status