在 CentOS 上如果遇到 网络丢包(packet drop),可以从 抓包(tcpdump) 和 系统/内核丢包统计 两个层面来排查。下面给你一套常用做法。
tcpdump -i eth0 -nn
eth0:网卡名(用 ip addr 查看)-nn:不解析主机名和端口名tcpdump -i eth0 host 10.0.0.1
tcpdump -i eth0 port 80
tcpdump -i eth0 host 10.0.0.1 and port 80
tcpdump -i eth0 -w drop.pcap
然后:
scp drop.pcap user@yourpc:/tmp/
用 Wireshark 打开看 重传、乱序、RST、丢包
ip -s link
或
ifconfig eth0
关注:
RX droppedTX droppederrorsnetstat -s | grep -i drop
或
nstat -az | grep -i drop
常见丢包点:
TCPBacklogDropTCPReqQFullDropListenOverflowsPacketReceiveErrorsiptables -nvL
看有没有 DROP
cat /proc/sys/net/netfilter/nf_conntrack_max
cat /proc/sys/net/netfilter/nf_conntrack_count
如果接近 max,会丢包。
ss -tanp | grep -i retrans
或
netstat -ant | grep -E 'RETRANS|SYN_RECV'
ping -c 100 ip
mtr -n ip
| 现象 | 可能原因 |
|---|---|
| RX dropped | 网卡 / 驱动 / 缓冲区 |
| TCP retrans | 网络拥塞 |
| ListenOverflows | 连接数过高 |
| conntrack drop | 防火墙表满 |
| iptables DROP | 规则问题 |
如果你能补充:
我可以给你更精确的抓包命令和调优建议。