温馨提示×

如何清空Linux backlog

小樊
38
2026-08-02 04:01:03
栏目: 智能运维

在 Linux 中,“清空 backlog”需要明确具体场景,因为 backlog 可能是指网络队列、系统日志、任务队列、管道等。下面是常见几种含义及对应的清空/清理方法。


一、网络 backlog(最常见)

1️⃣ TCP 监听队列(listen backlog)

这是 listen() 中的 backlog:

listen(fd, backlog);

无法直接“清空”,但可以通过:

  • 重启监听服务
  • 关闭 socket
  • 接受所有 pending 连接来“自然消化”

查看当前 backlog 状态:

ss -lnt

示例:

ss -lnt
State   Recv-Q Send-Q Local Address:Port
LISTEN  0      128    0.0.0.0:80
  • Recv-Q:当前已完成但未 accept 的连接数
  • Send-Q:listen backlog 最大值

✅ 修改 backlog(临时):

sysctl -w net.core.somaxconn=4096

永久:

echo "net.core.somaxconn=4096" >> /etc/sysctl.conf
sysctl -p

二、半连接队列 / SYN backlog(SYN flood)

查看半连接队列:

cat /proc/sys/net/ipv4/tcp_max_syn_backlog

查看当前 SYN 队列:

ss -s

✅ 清空方式(实际是丢包):

  • 重启网络服务
  • 调整参数减少攻击影响:
sysctl -w net.ipv4.tcp_syncookies=1

三、清空 systemd journal 日志(常被误叫 backlog)

journalctl --vacuum-size=100M
journalctl --vacuum-time=3d

完全清空:

journalctl --rotate
journalctl --vacuum-time=1s

⚠️ 不推荐“物理删除” /var/log/journal/


四、清空 dmesg / 内核日志 backlog

dmesg -c
  • -c:打印后 立即清空 内核 ring buffer

五、清空 pipe / fifo 队列(如 stdin backlog)

while read -t 0.1 -r line; do : ; done < /path/to/fifo

或:

dd if=fifo of=/dev/null iflag=nonblock

六、清空任务队列(如打印队列)

CUPS 打印队列

cancel -a

七、进程 backlog(如 Redis / Nginx)

服务 清空方式
Redis FLUSHALL
Nginx 重启 / reload
Kafka 删除 topic
RabbitMQ 删除 queue

八、如果你指的是“断网后积压的 TCP 数据”

  • 关闭 socket
  • 重启应用
  • 调整:
sysctl -w net.ipv4.tcp_rmem="4096 87380 6291456"

✅ 建议你确认的问题

请补充以下信息我可以精确回答:

  1. 网络 backlog 还是 日志 backlog
  2. 和哪个服务有关(Nginx / Redis / Kafka / 自写程序)?
  3. 想清空的是 新建连接 还是 未处理数据

如果你愿意,可以直接贴:

ss -lnt

或说明报错信息。

0