Linux dropped怎么记录
导读:Linux 丢包记录与定位实用指南 一 按场景选择记录方式 防火墙丢弃(iptables/nftables):用内核日志精确记录被策略丢弃的数据包,适合定位“被规则丢弃”的原因。 内核路径丢弃(协议栈/驱动):用跟踪工具抓取 kfree_...
Linux 丢包记录与定位实用指南
一 按场景选择记录方式
- 防火墙丢弃(iptables/nftables):用内核日志精确记录被策略丢弃的数据包,适合定位“被规则丢弃”的原因。
- 内核路径丢弃(协议栈/驱动):用跟踪工具抓取 kfree_skb 事件,定位具体的内核函数与调用栈。
- 队列/整形丢包(qdisc/tc):记录和分析 tc 队列统计,定位由 netem 等整形规则造成的丢包。
- 连接跟踪丢包(nf_conntrack):监控 conntrack 表满等导致的丢包,适合高并发/NAT 场景。
二 防火墙丢弃记录 iptables LOG
- 记录入站丢弃
sudo iptables -N LOGGING sudo iptables -A INPUT -j LOGGING sudo iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4 sudo iptables -A LOGGING -j DROP - 记录出站丢弃
sudo iptables -N LOGGING sudo iptables -A OUTPUT -j LOGGING sudo iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4 sudo iptables -A LOGGING -j DROP - 同时记录入站与出站
sudo iptables -N LOGGING sudo iptables -A INPUT -j LOGGING sudo iptables -A OUTPUT -j LOGGING sudo iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4 sudo iptables -A LOGGING -j DROP - 日志查看与要点
- 日志默认进入 /var/log/messages 或 /var/log/syslog,可用
tail -f实时查看;示例日志前缀为 IPTables-Dropped:,便于 grep 过滤。 - 建议始终使用 -m limit 限流,避免日志风暴(如每分钟 2 条)。
- 若需单独文件,可在 rsyslog 配置中将包含前缀的消息单独写入(如 /var/log/iptables.log),并配合 logrotate 做按日/按大小切割。
- 日志默认进入 /var/log/messages 或 /var/log/syslog,可用
三 内核路径丢弃记录
- dropwatch 实时观察内核丢包位置
输出示例:sudo dropwatch -lkas1 drops at icmp_rcv+11c (0xffffffff8193bb1c) [software],可直接看到函数与偏移。 - perf 抓取 kfree_skb 事件(含调用栈)
sudo perf record -g -a -e skb:kfree_skb sudo perf script - eBPF/BCC 工具
sudo bpftrace -e 'tracepoint:skb:kfree_skb { @[kstack] = count(); } ' # 或 sudo /usr/share/bcc/tools/tcpdrop # 关注 TCP 层丢包 - SystemTap 脚本
以上方法可帮助定位“内核在何处丢弃”,配合火焰图/调用栈进一步分析根因。sudo stap -v /usr/share/doc/systemtap-*/examples/network/dropwatch.stp
四 队列与整形丢包记录 tc
- 查看队列与丢包统计
tc -s qdisc ls dev eth0 - 若使用 netem 整形并出现丢包,可直接删除规则验证
删除后复测,丢包消失即可确认是整形规则所致。tc qdisc del dev eth0 root netem loss 30%
五 连接跟踪丢包记录 nf_conntrack
- 监控 conntrack 表使用与满表丢包迹象
cat /proc/sys/net/netfilter/nf_conntrack_count cat /proc/sys/net/netfilter/nf_conntrack_max dmesg | tail -n 50 | grep conntrack - 典型现象与处理
- 日志出现 “ip_conntrack: table full, dropping packet” 表示表满导致丢包。
- 可临时调大并优化超时(示例值,需结合内存与业务评估):
echo 102400 > /proc/sys/net/netfilter/nf_conntrack_max echo 21600 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established - 永久生效写入 /etc/sysctl.conf 并执行
sysctl -p。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux dropped怎么记录
本文地址: https://pptw.com/jishu/749862.html
