网络丢包常因队列容量不足导致。需优化以下关键参数:
net.ipv4.tcp_max_syn_backlog
(如设为8192),应对高并发SYN请求,避免半连接队列溢出丢弃SYN包;开启net.ipv4.tcp_syncookies=1
,通过加密算法生成SYN Cookie验证请求合法性,防止SYN Flood攻击导致的队列溢出。net.core.somaxconn
(如设为30000),允许更多已完成三次握手的连接进入队列等待应用层accept;设置net.ipv4.tcp_abort_on_overflow=0
,避免队列满时发送RST包重置连接,减少客户端重试带来的额外负载。net.core.netdev_max_backlog
(如设为30000),增加网络设备接收数据包的缓冲能力,避免因队列满导致数据包被丢弃。合理设置TCP缓冲区大小,适应高带宽、高延迟网络:
rmem
)和发送(wmem
)缓冲区:sysctl -w net.ipv4.tcp_rmem='4096 131072 16777216' # 最小/默认/最大接收窗口
sysctl -w net.ipv4.tcp_wmem='4096 16384 16777216' # 发送窗口优化
sysctl -w net.core.rmem_max=16777216 # 接收缓冲区最大值
sysctl -w net.core.wmem_max=16777216 # 发送缓冲区最大值
缓冲区过小会导致频繁重传,过大则会占用过多内存,需根据网络带宽(如1Gbps对应约12.5MB缓冲区)和应用需求调整。选择适合高延迟网络的拥塞控制算法,提升吞吐量:
sysctl -w net.ipv4.tcp_congestion_control=bbr
BBR在跨地域、高延迟网络中可将吞吐提升30%~100%,尤其适合视频流、大数据传输等场景。ethtool -l eth0
查看网卡队列数,通过ethtool -L eth0 combined 8
启用多队列(队列数与CPU核心数匹配),分散中断负载;将网卡中断绑定到特定CPU核心(如echo 0f > /proc/irq/$(grep eth0 /proc/interrupts | cut -d: -f1)/smp_affinity
),减少CPU上下文切换,提升中断处理效率。rx
)/发送(tx
)环形缓冲区大小(如ethtool -G eth0 rx 8192 tx 8192
),突发流量场景下建议提升至8192以上,避免缓冲区溢出丢包。过度使用交换分区(Swap)会导致频繁磁盘IO,增加丢包风险:
vm.swappiness
(如设为10),减少系统对Swap的使用倾向,优先使用物理内存:sysctl -w vm.swappiness=10
vm.dirty_ratio
(如设为10,表示内存脏页占比达到10%时触发写回)和vm.dirty_background_ratio
(如设为5,后台写回阈值),减少瞬时IO压力。telnet
、ftp
),减少守护进程对CPU、内存的占用:systemctl disable telnet.socket
lsmod
查看加载的模块,用rmmod
移除,降低内核复杂度。ethtool
开启网卡硬件校验和计算,减少CPU负载:ethtool -K eth0 rx-checksum on tx-checksum on
hugepages=2048
),减少内存页分配开销,提升内存访问效率。定期检查网卡驱动与系统固件更新,修复已知bug(如中断处理延迟、缓冲区管理问题),提升硬件兼容性与稳定性。
ethtool
查看网卡硬件级丢包统计(如接收/发送丢包数):watch -n 1 "ethtool -S eth0 | grep -E 'discard|error'"
nload
监控带宽利用率与丢包率(如nload -u M eth0
),直观了解网络负载情况。mtr
(结合ping与traceroute)实时显示网络路径中各节点的丢包率(如mtr -c 100 -i 0.5 目标IP
)。ss -lnt
查看全连接队列状态(Recv-Q
为当前队列长度,Send-Q
为队列最大值),若Recv-Q
接近Send-Q
,说明队列溢出。使用tc
工具对流量进行分类与优先级标记,确保关键业务(如视频会议、数据库同步)的带宽:
tc qdisc add dev eth0 root handle 1: htb default 30 # 根队列采用HTB算法
tc class add dev eth0 parent 1: classid 1:1 htb rate 1Gbit ceil 1Gbit # 父类带宽限制
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:1 # 将80端口流量划入高优先级队列
通过QoS可避免非关键流量(如下载、备份)占用全部带宽,导致关键业务丢包。
以上策略覆盖了从网络层到硬件层的丢包优化,需根据实际场景(如高并发Web服务器、数据库服务器、视频流媒体服务器)调整参数。优化前需备份配置文件(如/etc/sysctl.conf
),并通过监控工具验证效果,避免过度优化导致系统不稳定。