Linux网络性能调优(内核参数、队列、RSS)
一、Linux网络性能调优概述与调优原则
调优目标:
调优顺序原则(从易到难):
- 应用层优化(Nginx/HAProxy/数据库参数)
生产金句:
“网络性能问题,80%可以通过内核参数 + 网卡多队列解决,剩下20%需要硬件升级或应用重构。”
二、网卡驱动与多队列基础(RSS、RPS、RFS、XPS)
RSS(Receive Side Scaling):网卡硬件根据哈希(IP+端口)将报文分发到不同RX队列,由不同CPU核心处理。
查看与启用:
ethtool -l ens160 # 查看支持队列数
ethtool -L ens160 combined 8 # 设置8个队列(推荐 = CPU核心数/2 ~ 核心数)
# 查看当前队列
cat /proc/interrupts | grep ens160
RPS(Receive Packet Steering):软件层面将中断分发到多个CPU(网卡不支持RSS时使用)。
echo f > /sys/class/net/ens160/queues/rx-0/rps_cpus # 启用所有CPU
RFS(Receive Flow Steering):根据流(连接)将报文导向同一CPU,减少上下文切换。
echo 32768 > /proc/sys/net/core/rps_sock_flow_entries
XPS(Transmit Packet Steering):发送侧多队列优化。
echo f > /sys/class/net/ens160/queues/tx-0/xps_cpus
生产推荐:10G以上网卡必须开启RSS + XPS,队列数建议设为CPU物理核心数的1~2倍。
三、内核网络参数生产推荐值(sysctl.conf)
推荐生产配置(/etc/sysctl.d/99-network.conf):
# 基础
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 50000
net.core.rmem_default = 1048576
net.core.rmem_max = 16777216
net.core.wmem_default = 1048576
net.core.wmem_max = 16777216
# TCP栈
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0 # 4.12+内核已废弃,建议关闭
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.tcp_mem = 786432 1048576 1572864
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# 连接跟踪
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_established = 3600
# 其他
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.ip_forward = 1
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr # 推荐BBR或cubic
应用命令:
sysctl -p /etc/sysctl.d/99-network.conf
四、TCP协议栈深度调优
拥塞控制算法(2026推荐):
sysctl -w net.ipv4.tcp_congestion_control=bbr
# 或者 cubic(传统稳定)
BBRv2(需较新内核):延迟更低,适合高带宽长肥网络。
缓冲区调优:
大内存服务器可将 rmem_max/wmem_max 提升至 64MB~256MB。
TIME_WAIT 优化:
tcp_tw_reuse=1 + tcp_fin_timeout=15 可大幅减少TIME_WAIT占用。
五、中断 coalescing 与 irqbalance 优化
中断合并(Coalescing):减少中断次数,提高吞吐。
ethtool -C ens160 rx-usecs 100 tx-usecs 100
ethtool -C ens160 adaptive-rx off adaptive-tx off
irqbalance(多核中断均衡):
dnf install irqbalance -y
systemctl enable --now irqbalance
中断亲和性手动绑定(极致优化):
# 将 ens160 中断绑定到 CPU 0-7
echo 000000ff > /proc/irq/$(cat /proc/interrupts | grep ens160 | awk '{print $1}' | head -1)/smp_affinity
六、网卡 Offload 功能开启与关闭策略
常用 Offload:
- TSO(TCP Segmentation Offload)
- GSO(Generic Segmentation Offload)
- GRO(Generic Receive Offload)
- LRO(Large Receive Offload)
生产推荐:
ethtool -K ens160 tso on gso on gro on
ethtool -K ens160 lro off # 某些场景(如抓包)需关闭
问题场景:与某些防火墙/负载均衡冲突时,可临时关闭 TSO/GSO。
七、大页内存、巨型帧(Jumbo Frame)与 MTU 优化
巨型帧(10G+网卡推荐):
ip link set ens160 mtu 9000
# 交换机、所有路径设备均需支持
大页内存(HugePages):减少TLB Miss,提升网络栈性能。
echo 2048 > /proc/sys/vm/nr_hugepages
八、生产环境一键调优脚本与 Ansible 部署
一键调优脚本(/usr/local/bin/network-tune.sh):
#!/bin/bash
# 网卡多队列
ethtool -L ens160 combined 16
# sysctl 参数
cat > /etc/sysctl.d/99-network-tune.conf << EOF
net.core.netdev_max_backlog = 50000
net.core.somaxconn = 65535
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_max_syn_backlog = 65535
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF
sysctl -p /etc/sysctl.d/99-network-tune.conf
# 中断优化
systemctl restart irqbalance
echo"网络性能调优完成!"
Ansible Playbook:可批量对数百台服务器执行调优。
九、性能测试工具与基准测试方法
测试工具:
基准测试示例:
# 服务端
iperf3 -s
# 客户端
iperf3 -c 10.0.8.100 -P 4 -t 60
监控指标:
- ethtool -S ens160(网卡错误统计)