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”問題。需根據實際情況調整排查順序(如先硬件后軟件、先本地后網絡),優先解決高頻問題(如緩沖區滿、防火墻攔截)。