Linux Dropped故障排查指南
“Dropped”在Linux系统中通常指网络数据包被丢弃(如接收/发送缓冲区满、防火墙拦截、硬件故障等),需通过系统性排查定位根源。以下是具体步骤:
使用ip -s link show或ifconfig命令查看网络接口统计信息,重点关注rx-drp(接收丢弃)、**tx-drp(发送丢弃)**列。若数值持续增长,说明接口存在丢包问题。例如:
ip -s link show eth0
# 输出示例:RX: bytes packets errors dropped overrun mcast
# 1.2G 1.5M 0 120 0 10
若dropped值不为0,需进一步排查接口配置或硬件问题。
使用top、free -h、df -h命令检查CPU、内存、磁盘空间使用情况。若资源占用过高(如内存不足导致Ring Buffer溢出),系统无法及时处理数据包,会引发丢包。例如:
free -h # 查看内存使用,若“available”内存接近0,需优化内存占用
top # 查看CPU占用,若某进程占用过高,需终止或优化
通过journalctl或dmesg查看系统日志,寻找与网络丢包相关的错误信息(如网卡故障、驱动问题)。例如:
journalctl -k | grep -i "dropped\|error\|fail" # 内核日志过滤
dmesg | grep eth0 # 网卡相关日志
常见日志关键词:NETDEV WATCHDOG: eth0 (e1000): transmit queue 0 timed out(网卡超时)、buffer overflow(缓冲区溢出)。
ping命令检查目标主机的连通性(如ping 8.8.8.8),若延迟高或丢包率高,可能是网络拥塞或链路问题。traceroute(或tracepath)查看数据包传输路径,定位丢包节点(如traceroute google.com)。ip route或route -n确认路由表是否正确(如默认网关是否指向正确设备)。iptables -L -v -n查看防火墙规则,检查是否有DROP规则误拦截正常流量(如DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22可能拦截SSH连接)。firewall-cmd --list-all(firewalld)或ufw status(ufw)查看规则,确保必要端口(如80、443)开放。ausearch -m avc -ts recent检查是否有安全策略拦截网络操作。使用tcpdump或Wireshark捕获网络数据包,分析丢包的具体原因(如TCP重传、UDP丢包、协议错误)。例如:
sudo tcpdump -i eth0 -w capture.pcap # 捕获eth0接口数据包
sudo tcpdump -i eth0 'icmp' # 过滤ICMP协议(ping包)
通过Wireshark过滤tcp.analysis.retransmission(TCP重传)或udp.analysis.lost_segment(UDP丢包),定位问题根源。
修改/etc/sysctl.conf优化网络缓冲区和TCP参数,提升数据包处理能力。例如:
# 增加接收/发送缓冲区大小
net.core.rmem_max = 262144
net.core.wmem_max = 262144
# 优化TCP连接超时和重试
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_fin_timeout = 30
修改后执行sysctl -p使配置生效。
lspci -k或lsmod查看网卡驱动是否正确加载(如e1000驱动对应Intel千兆网卡)。apt install e1000e-dkms)。ethtool -i eth0查看驱动版本)。ethtool eth0查看网卡健康状态(如Link detected: yes表示链路正常,Errors: 120表示错误计数)。通过以上步骤逐步排查,可定位并解决Linux系统中的“dropped”问题。需根据实际情况调整排查顺序(如先硬件后软件、先本地后网络),优先解决高频问题(如缓冲区满、防火墙拦截)。