Linux dropped最佳实践
导读:Linux dropped 最佳实践 一 概念与判定 在 Linux 中,dropped 常见于两类场景: 网络层面:接口统计中的 RX/TX dropped,以及协议栈统计中的 UDP receive buffer errors 等。...
Linux dropped 最佳实践
一 概念与判定
- 在 Linux 中,dropped 常见于两类场景:
- 网络层面:接口统计中的 RX/TX dropped,以及协议栈统计中的 UDP receive buffer errors 等。
- 文件/数据库层面:如 MySQL 执行 DROP TABLE 时因大文件删除导致长时间阻塞或 I/O 抖动。
- 快速判定要点:
- 网络接口层:使用 ip -s link show、ifconfig、netstat -i 查看是否有持续增长的 dropped/errors。
- 协议栈层:使用 netstat -s -u(UDP)观察 packet receive errors、receive buffer errors 的增长趋势。
- 网卡驱动/硬件层:使用 ethtool -S 检查 rx_errors/rx_missed_errors/rx_fifo_errors 等;必要时用 ethtool -g/-G 调整 ring buffer。
- 应用层/数据库:如 MySQL 删除超大 .ibd 文件时出现长时间卡顿,属于“删除路径”上的阻塞而非网络 dropped。
二 网络 dropped 预防与优化
- 基线健康与容量规划
- 核查物理链路与设备:网线、网卡、交换机端口状态与日志;必要时更换硬件或调整上联。
- 监控连接与负载:用 ss -s、netstat 观察 ESTABLISHED/TIME_WAIT/CLOSE_WAIT 规模,避免连接风暴。
- 路由与防火墙:用 ip route、iptables/firewalld 检查异常规则、黑洞路由或策略导致丢包。
- 驱动与内核
- 保持 网卡驱动 与 内核 为稳定新版本,修复已知驱动/栈问题。
- 缓冲区与队列调优(示例为 sysctl 与 ethtool)
- 增加套接字/内核缓冲区上限,缓解突发流量下的丢包:
- sysctl -w net.core.rmem_max=16777216
- sysctl -w net.core.wmem_max=16777216
- 适度开启 TCP 快速打开(适用于短连接高并发场景):
- sysctl -w net.ipv4.tcp_tw_reuse=1
- 调整网卡 ring buffer,降低 rx_missed_errors 风险:
- 查看:ethtool -g eth0
- 调整:ethtool -G eth0 rx 8192(按实际值阶梯式调优)
- 增加套接字/内核缓冲区上限,缓解突发流量下的丢包:
- 传输层与应用层
- 结合业务 RTT/带宽设置合理的 TCP 窗口 与 重传参数,避免不必要重传与队头阻塞。
- 对 UDP 服务,合理设置应用层 接收缓冲 与 速率限制,减少内核 receive buffer errors。
- 变更与验证
- 调优前备份现有配置;变更后在同等负载下复核 dropped/errors 指标与 P95/P99 延迟。
三 网络 dropped 快速排查路径
- 分层定位思路
- 物理/数据链路:链路灯态、对端设备日志、更换网线/端口/网卡排除硬件问题。
- 接口统计:ip -s link、ifconfig、netstat -i 观察 dropped/errors 是否持续增长。
- 驱动/硬件:ethtool -S 检查 rx_errors/rx_missed_errors/rx_fifo_errors;必要时增大 ring buffer。
- 协议栈与应用:netstat -s -u 检查 UDP receive buffer errors;用 tcpdump 抓包确认丢包发生在 网卡/驱动/内核/应用 哪个环节。
- 路由与安全策略:ip route、iptables/firewalld 排查策略与黑洞路由。
- 典型现象与对策
- 仅 UDP 有错误且 receive buffer errors 增长:增大应用/内核接收缓冲,或在应用侧限流与背压。
- ethtool -S 显示 rx_missed_errors 增长:增大 ring buffer,并检查中断绑定/CPU 负载均衡。
- ping 正常但部分连接超时:抓包定位 SYN 无响应或重传,排查 backlog/连接表/防火墙 瓶颈。
四 大表或超大文件删除的 drop 优化
- 场景与风险
- MySQL 删除含 100GB+ .ibd 的大表时,直接 DROP 会触发大量磁盘 IO,导致长时间阻塞与业务抖动。
- 推荐做法
- 利用 硬链接 将 .ibd 文件多一个引用,使“删除表名”这一步几乎瞬时完成(仅删除目录项),随后再异步清理物理文件:
- ln user.ibd user.ibd.bak
- DROP TABLE 快速返回
- 通过 truncate 逐步缩小 user.ibd.bak(如从 100G 每次递减 10G 并 sleep 2s),最后 rm 删除
- 操作建议
- 选择业务低峰期执行,避免影响在线业务
- 全程监控 IO/负载,确保有回滚与可观测性
- 完成后校验空间释放与数据一致性
- 利用 硬链接 将 .ibd 文件多一个引用,使“删除表名”这一步几乎瞬时完成(仅删除目录项),随后再异步清理物理文件:
五 监控 备份与变更管理
- 监控与告警
- 持续采集并告警 接口 dropped/errors、UDP receive buffer errors、TCP 重传/超时、连接数 等关键指标,结合 P95/P99 延迟 与业务 SLO。
- 备份与恢复
- 采用 完全备份 + 增量备份、自动化脚本 + 定时任务,并定期校验备份可用性与完整性;关键系统引入专业工具(如 Bacula/Amanda/Backupninja)。
- 变更与回滚
- 任何 sysctl/ethtool 等内核/驱动参数调整前先备份配置与基线指标;变更后灰度观察并保留回滚方案。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux dropped最佳实践
本文地址: https://pptw.com/jishu/756433.html
