Ubuntu 中 backlog 与系统日志的关系
术语澄清
- 在技术语境中,backlog通常有两种含义:其一是网络编程里的连接队列长度(如 TCP 的半连接队列与全连接队列);其二是运维口语中的任务/事件积压。而系统日志是由 systemd-journald 与 rsyslog 等组件产生、存储与轮转的事件记录。两者并非同一概念,但在出现“积压”时,系统日志往往是定位根因与验证影响范围的第一手证据来源。
两种 backlog 与系统日志的对应关系
| backlog 类型 |
与系统日志的关系 |
常用查看与定位方法 |
| 网络连接 backlog(TCP 队列) |
队列满会导致新连接被丢弃或超时,这类异常会体现在系统日志中(如服务日志报错、内核日志提示丢弃/超限),因此可通过日志快速确认“是否因队列问题导致失败”。 |
查看监听队列与内核参数:ss -lnt、**ss -s |
| 任务/事件积压(广义) |
当“积压”指日志本身写入缓慢或处理不及时,通常表现为日志延迟、丢失或查询缓慢;这往往与日志系统的存储与轮转配置相关,需要检查 journald 与 rsyslog 的容量与策略。 |
检查 journald 容量与持久化:journalctl --disk-usage、创建 /var/log/journal 并重启 systemd-journald;配置大小与保留:/etc/systemd/journald.conf 中的 SystemMaxUse、MaxRetentionSec;检查 rsyslog 与轮转:/etc/rsyslog.conf、/etc/logrotate.conf(如将 rotate 4 改为 rotate 26 以保留约半年)。 |
典型关联场景
- Web/数据库等网络服务突发“连接被拒/超时”:内核或应用日志出现“accept 队列溢出/连接丢弃”等提示;用 ss -lnt 可见 Recv-Q 持续接近或超过 somaxconn,同时 netstat -s 的 “SYNs to LISTEN sockets ignored” 等指标上升。此时“网络 backlog”是根因,系统日志用于证实与复盘。
- 系统整体变慢或“日志没跟上”:可能是 journald 或 rsyslog 容量/轮转策略不当导致写入阻塞或旧日志被过早清理。通过 journalctl --disk-usage 与 /etc/systemd/journald.conf 调整 SystemMaxUse/MaxRetentionSec,并对 /var/log/ 下的文本日志配置 logrotate(如将 rotate 4 改为 rotate 26)即可缓解“日志积压”对排障的影响。
快速排查清单
- 明确“backlog”类型:是网络队列还是任务积压。
- 若是网络:用 ss -lnt、ss -s、cat /proc/sys/net/core/somaxconn、sysctl net.ipv4.tcp_max_syn_backlog 检查队列与上限;用 journalctl -u <服务名> 与 journalctl -k 查服务与内核日志是否出现溢出/丢弃迹象。
- 若是日志积压:用 journalctl --disk-usage 评估占用;按需配置 /etc/systemd/journald.conf(如 SystemMaxUse、MaxRetentionSec)并启用持久化(创建 /var/log/journal);检查 /etc/rsyslog.conf 与 /etc/logrotate.conf(如 rotate 26)确保文本日志保留周期与轮转策略合理。