一、CentOS Backlog监控方法
ss命令(推荐):ss是netstat的现代替代工具,能更高效地显示TCP监听端口的backlog状态。使用ss -tnlp命令可查看所有处于LISTEN状态的TCP连接,输出中的Recv-Q列表示当前backlog队列中已接收但未处理的连接数,Send-Q列表示backlog队列的最大长度(由somaxconn参数定义)。例如,若Recv-Q接近Send-Q,说明backlog队列即将满。netstat命令:传统网络统计工具,通过netstat -tnlp查看监听端口的连接信息,Recv-Q和Send-Q的含义与ss命令一致。但netstat性能较差,不建议在高负载系统中频繁使用。/proc/sys/net/core/somaxconn:定义单个端口的最大监听队列长度,默认值通常为128(CentOS 7/8),可通过cat /proc/sys/net/core/somaxconn查看,用echo 4096 > /proc/sys/net/core/somaxconn临时修改(重启失效)。/proc/sys/net/ipv4/tcp_max_syn_backlog:定义SYN半连接队列的最大长度,通过cat /proc/sys/net/ipv4/tcp_max_syn_backlog查看,临时修改用sysctl -w net.ipv4.tcp_max_syn_backlog=2048。journalctl -xe或grep audit /var/log/messages查看系统日志,若存在backlog limit exceeded(审计服务backlog满)或TCP: too many orphaned sockets(网络backlog满)等错误,说明backlog队列已溢出。auditd)相关,使用ausearch -k工具查询具体审计事件,定位导致backlog满的原因(如审计规则过多、日志量过大)。编写Shell脚本定期检查backlog状态,超过阈值时发送告警。例如,监控Recv-Q是否超过somaxconn的80%:
#!/bin/bash
THRESHOLD=80 # 阈值设为somaxconn的80%
SOMAXCONN=$(cat /proc/sys/net/core/somaxconn)
BACKLOG=$(ss -tnlp | awk '/LISTEN/ {print $2}' | cut -d':' -f1 | sort -nr | head -1)
if [ "$BACKLOG" -gt $((SOMAXCONN * THRESHOLD / 100)) ]; then
echo "警告:backlog使用率超过${THRESHOLD}%,当前值为${BACKLOG},阈值为${SOMAXCONN}" | mail -s "CentOS Backlog预警" admin@example.com
fi
将脚本添加到crontab -e中(如每5分钟运行一次:*/5 * * * * /path/to/script.sh),实现定期监控。
二、CentOS Backlog预警策略
根据服务器的业务负载调整backlog参数:
somaxconn:一般设置为1024-4096(高并发服务器可设为8192),需平衡系统资源占用和连接处理能力。tcp_max_syn_backlog:针对SYN Flood攻击,建议设置为somaxconn的1.5倍(如somaxconn=4096,则tcp_max_syn_backlog=6144)。node_exporter采集系统指标,通过ss命令的Recv-Q值作为监控项(需编写Exporter或使用文本采集)。backlog_queue_length > 3000持续1分钟),通过Alertmanager发送邮件、短信或企业微信通知。net.tcp.listen监控项(键值为net.tcp.listen[port,<state>],如net.tcp.listen[80,LISTEN]),设置触发器(如{host:net.tcp.listen[80,LISTEN].last()} > 1000)。Recv-Q持续上升),提前扩容或优化服务(如增加服务器节点、优化应用层连接处理逻辑)。/var/log/audit/audit.log)或应用日志,避免日志文件过大占用磁盘空间,导致系统无法记录新的backlog信息。