Linux 丢包记录与定位实用指南
一 按场景选择记录方式
二 防火墙丢弃记录 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
tail -f 实时查看;示例日志前缀为 IPTables-Dropped:,便于 grep 过滤。三 内核路径丢弃记录
sudo dropwatch -lkas
输出示例:1 drops at icmp_rcv+11c (0xffffffff8193bb1c) [software],可直接看到函数与偏移。sudo perf record -g -a -e skb:kfree_skb
sudo perf script
sudo bpftrace -e 'tracepoint:skb:kfree_skb { @[kstack] = count(); }'
# 或
sudo /usr/share/bcc/tools/tcpdrop # 关注 TCP 层丢包
sudo stap -v /usr/share/doc/systemtap-*/examples/network/dropwatch.stp
以上方法可帮助定位“内核在何处丢弃”,配合火焰图/调用栈进一步分析根因。四 队列与整形丢包记录 tc
tc -s qdisc ls dev eth0
tc qdisc del dev eth0 root netem loss 30%
删除后复测,丢包消失即可确认是整形规则所致。五 连接跟踪丢包记录 nf_conntrack
cat /proc/sys/net/netfilter/nf_conntrack_count
cat /proc/sys/net/netfilter/nf_conntrack_max
dmesg | tail -n 50 | grep conntrack
echo 102400 > /proc/sys/net/netfilter/nf_conntrack_max
echo 21600 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
sysctl -p。