centos backlog怎么监控
导读:CentOS Backlog 监控与告警实战 一 关键概念与判定依据 backlog在 Linux 中指两个队列: 半连接队列(SYN 队列):存放尚未完成三次握手的连接,受内核参数 net.ipv4.tcp_max_syn_backl...
CentOS Backlog 监控与告警实战
一 关键概念与判定依据
- backlog在 Linux 中指两个队列:
- 半连接队列(SYN 队列):存放尚未完成三次握手的连接,受内核参数 net.ipv4.tcp_max_syn_backlog 等影响。
- 全连接队列(Accept 队列):存放已完成三次握手、等待应用 accept() 的连接。其实际大小并非应用设置的 backlog 值本身,而是取 min(应用 backlog, net.core.somaxconn) 的较小者,并受内核实现细节影响。队列溢出时,内核会按 tcp_synack_retries 进行 SYN+ACK 重传,溢出行为受 tcp_abort_on_overflow 影响。监控时应同时关注这两类队列与溢出迹象。
二 命令行快速查看
- 查看系统级队列上限与当前监听套接字的队列使用情况:
- 系统最大全连接队列上限:cat /proc/sys/net/core/somaxconn
- 半连接队列上限:cat /proc/sys/net/ipv4/tcp_max_syn_backlog
- 监听套接字队列与当前排队连接数:ss -lnt | egrep ‘(:80|:443|:<
你的端口>
)’
- 关注输出中的 Recv-Q(当前排队字节数,近似全连接队列当前长度)与 Send-Q(该监听套接字的最大队列长度,即应用 backlog 与 somaxconn 的较小者)。
- 查看 TCP 统计与溢出迹象:
- 总体统计:netstat -s 或 ss -s
- 溢出与重传相关计数:cat /proc/net/snmp | egrep ‘TcpExt:.*(ListenOverflows|TCPBacklogDrop|TCPRetransSegs|TCPSynRetrans)’
- ListenOverflows / TCPBacklogDrop 增长,通常意味着全连接或半连接队列出现溢出。
- 抓包侧证(定位是否为连接洪泛或握手异常):tcpdump -ni any ‘tcp[tcpflags] &
(tcp-syn|tcp-ack) == tcp-syn’
以上命令覆盖了队列上限、当前使用、溢出计数与流量侧证,适合日常巡检与问题定位。
三 可视化与告警方案
- 轻量脚本轮询(适合无监控系统场景)
- 思路:用 ss 获取 Recv-Q/Send-Q,用 /proc/net/snmp 获取 ListenOverflows/TCPBacklogDrop,当超过阈值时发邮件或企业微信/钉钉 Webhook。
- 伪代码要点:
- 阈值:fullconn_warn=800;listen_overflow_warn=10(按业务与端口调整)
- 采集:ss -lnt | grep :80;cat /proc/net/snmp | egrep ‘TcpExt:.*(ListenOverflows|TCPBacklogDrop)’
- 判断:Recv-Q 接近 Send-Q 或持续增长;ListenOverflows/TCPBacklogDrop 环比上升
- 动作:告警并附带时间戳、端口、Recv-Q/Send-Q、溢出计数
- Prometheus + Exporter + Alertmanager(适合生产)
- 采集:使用 node_exporter 的 textfile 收集器或 Blackbox Exporter 探测端口可用性;应用/内核指标可用 Prometheus Node Exporter 自定义脚本 或 eBPF/BPFtrace 导出队列与溢出计数。
- 建议指标命名:
- node_tcp_backlog_current{ port=“80”} (由 ss/脚本采集)
- node_tcp_backlog_max{ port=“80”} (由 ss 的 Send-Q 或内核参数推导)
- node_tcp_listen_overflow_total{ port=“80”} (由 /proc/net/snmp 的 ListenOverflows/TCPBacklogDrop 累计)
- 告警规则示例:
- 规则:node_tcp_backlog_current / node_tcp_backlog_max > 0.8 持续 1m 触发 warning
- 规则:increase(node_tcp_listen_overflow_total[5m]) > 0 触发 warning(溢出计数增长即告警)
- 通知:通过 Alertmanager 路由到邮件、企业微信、钉钉或 Slack。
- 传统监控平台
- Zabbix/Nagios 可通过 UserParameter 执行 ss/脚本采集,配置触发器在阈值或溢出增长时告警。
四 阈值建议与优化方向
- 阈值与基线
- 以 Send-Q(应用 backlog 与 somaxconn 的较小者)为上限,设置使用率告警:如 ≥70% 预警、≥90% 严重。
- 对 ListenOverflows/TCPBacklogDrop 设置“持续增长即告警”,避免偶发抖动。
- 关联内核参数
- 合理提升 net.core.somaxconn(如 2048/4096),并同步调整应用 backlog,使其与 somaxconn 匹配;全连接队列实际大小取二者较小值。
- 在遭遇连接洪泛或 SYN 风暴时,结合业务调优 net.ipv4.tcp_max_syn_backlog、tcp_synack_retries 与 tcp_abort_on_overflow,并配合清洗/限速策略。
- 修改 somaxconn 示例:echo 2048 > /proc/sys/net/core/somaxconn;持久化到 /etc/sysctl.conf:net.core.somaxconn = 2048 后执行 sysctl -p。
- 应用层优化
- 提高服务并发 accept 能力(多 worker、异步 I/O)、缩短 accept 循环时延,避免队列长期占满。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos backlog怎么监控
本文地址: https://pptw.com/jishu/752383.html
