Linux "dropped"配置与优化指南
在Linux系统中,"dropped"通常指网络数据包被丢弃(如接口统计中的dropped计数)或系统因资源不足丢弃任务/连接。以下从查看、排查、优化、模拟四个维度,系统介绍"dropped"的配置与管理方法:
要了解系统或接口的"dropped"情况,需先通过以下命令获取数据:
ip或ifconfig命令,重点关注dropped字段。ip link show eth0 | grep dropped # 查看eth0接口的dropped计数
ifconfig eth0 | grep dropped # 传统命令(部分系统需安装net-tools)
journalctl或/var/log/messages查找网络/硬件错误(如网卡故障导致的丢包)。journalctl -k | grep -i "dropped\|error\|fail" # 过滤内核日志中的dropped相关错误
若发现"dropped"值异常升高,需按以下流程定位原因:
ping测试目标主机连通性,tcpdump/wireshark抓包分析数据包流向(如是否因网络拥塞导致丢包)。smartctl -a /dev/sda(硬盘健康检测)、memtest86(内存检测)排除硬件故障。top/htop查看CPU、内存占用(内存不足会导致系统丢弃进程或网络数据包);vmstat 1监控系统级资源(如si/so列显示交换分区频繁使用,可能因内存不足导致丢包)。/proc/net/tcp(TCP连接状态)、/proc/net/udp(UDP连接状态),确认是否有大量TIME_WAIT或CLOSE_WAIT状态的连接(需调整TCP参数优化);iptables -L -n -v查看防火墙规则,确认是否有误拦截正常流量的DROP规则(如误配置的iptables -A INPUT -j DROP)。/proc/sys/net/core/netdev_max_backlog(网络设备接收队列长度,默认值可能过小,导致高负载时丢包);/proc/sys/net/ipv4/tcp_max_syn_backlog(SYN半连接队列长度,默认1024,应对SYN Flood攻击时可适当增大)。针对不同原因的"dropped"问题,可通过以下配置减少丢包:
编辑/etc/sysctl.conf(永久生效)或临时执行sysctl -w命令,优化以下参数:
# 增大TCP接收/发送缓冲区(减少因缓冲区满导致的丢包)
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216
# 增大半连接队列和accept队列(应对高并发连接)
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 4096
# 开启SYN Cookie(防止SYN Flood攻击导致队列溢出)
net.ipv4.tcp_syncookies = 1
# 启用TCP快速回收(加快TIME_WAIT状态的连接回收)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1 # 注意:IPv6环境下可能不兼容,需谨慎使用
修改后执行sysctl -p使配置生效。
noop/deadline,HDD用cfq)。echo noop > /sys/block/sda/queue/scheduler # 设置SSD为noop调度器
/etc/fstab中为文件系统添加noatime(减少访问时间更新带来的IO开销)。/dev/sda1 / ext4 defaults,noatime 0 1
echo vm.swappiness = 10 > /etc/sysctl.d/99-swappiness.conf
sysctl -p
/etc/security/limits.conf,增加用户/进程的最大文件描述符数。* soft nofile 65535
* hard nofile 65535
使用tc工具为关键业务(如数据库、Web服务)分配更高带宽或更低延迟,避免非关键流量占用过多资源。例如,为eth0设置优先级队列:
tc qdisc add dev eth0 root handle 1: htb default 20
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 500mbit prio 1 # 高优先级队列
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 500mbit prio 2 # 低优先级队列
tc filter add dev eth0 protocol ip parent 1:0 u32 match ip dport 3306 0xffff flowid 1:10 # 将MySQL流量(3306端口)加入高优先级队列
若需测试系统在丢包环境下的表现(如网络故障演练),可使用tc工具模拟丢包:
eth0接口的所有出站数据包随机丢弃1%。tc qdisc add dev eth0 root netem loss 1%
192.168.1.100:80的数据包丢弃5%。tc qdisc add dev eth0 root handle 1: prio
tc qdisc add dev eth0 parent 1:3 handle 30: netem loss 5%
tc filter add dev eth0 protocol ip parent 1:0 u32 match ip dst 192.168.1.100 match ip dport 80 0xffff flowid 1:3
tc qdisc del dev eth0 root # 删除eth0的所有qdisc规则
通过以上步骤,可有效查看、排查并优化Linux系统中的"dropped"问题,提升系统稳定性和网络性能。需注意,调整内核参数前务必备份原配置(如cp /etc/sysctl.conf /etc/sysctl.conf.bak),避免误操作导致系统异常。