如何监控Ubuntu Backlog状态
Backlog(积压队列)主要指网络连接待处理队列(如TCP SYN队列、accept队列)和系统/应用任务队列(如打印任务、邮件队列)。以下是针对Ubuntu系统的具体监控方法,覆盖命令行工具、系统日志及第三方工具:
网络backlog直接影响系统的网络吞吐能力,需重点监控TCP SYN队列(半连接队列)和accept队列(全连接队列)。
ss命令(推荐,替代传统netstat)ss是更高效的现代网络工具,可直接查看监听端口的backlog队列长度:
# 查看所有监听端口的TCP连接及backlog状态(重点关注"Recv-Q"和"Send-Q")
ss -tnl
# 统计TCP backlog相关指标(如被动打开连接数、连接重试次数)
ss -s | grep -E 'passive|retrans'
netstat命令(传统工具)若系统未安装ss,可使用netstat(需root权限):
sudo netstat -tnlp
-s选项可查看统计信息:sudo netstat -s | grep -i backlog
该命令会显示TCP backlog队列的溢出次数等统计值。/proc/net/snmp)通过内核提供的snmp文件,可获取更详细的TCP队列信息:
cat /proc/net/snmp | grep -A 10 Tcp
TcpPassiveOpens(被动打开连接数)、TcpAttemptFails(连接尝试失败数)、TcpCurrEstab(当前已建立连接数),这些指标可间接反映backlog队列的压力。tcpdump捕获流量(间接判断)通过捕获特定端口的流量,可观察连接请求是否被backlog队列拦截:
sudo tcpdump -i any 'tcp port 80 and (state SYN or state ESTABLISHED)'
SYN包但无后续ESTABLISHED包,可能表示accept队列已满。除网络外,系统或应用的任务队列(如打印队列、邮件队列)也可能出现积压,需针对性检查:
lpq # 查看默认打印队列
lpstat -o # 查看所有打印作业状态
postqueue -p # Postfix查看邮件队列
exim -bp # Exim查看邮件队列
journalctl/dmesg)通过系统日志可发现backlog相关的错误或警告:
# 查看系统日志(实时)
journalctl -xe | grep -i 'backlog\|queue\|full'
# 查看内核环缓冲区(含硬件/驱动告警)
dmesg | grep -i 'backlog\|overflow'
若需长期监控或自动化告警,可使用以下工具:
node_exporter采集系统指标(如TCP backlog、系统负载),Prometheus存储并分析数据,Alertmanager触发告警(邮件、短信等)。groups:
- name: network_backlog
rules:
- alert: HighTCPBacklog
expr: node_netstat_TcpPassiveOpens > 1000
for: 5m
labels:
severity: warning
annotations:
summary: "High TCP passive opens detected ({{ $value }})"
sudo apt install glances
glances # 终端查看
glances -w # Web界面(默认端口61208)
net.tcp.listen.queue);ss -l、netstat -l)需root权限才能查看完整信息;/proc/sys/net/core/somaxconn设置accept队列最大值),需结合业务场景调整;通过上述方法,可全面掌握Ubuntu系统的backlog状态,及时发现并解决性能瓶颈。