Linux 网络大流量传输优化方法

1. 内核参数调优

网络缓冲区调整

# 增加TCP读写缓冲区范围
echo "net.ipv4.tcp_rmem = 4096 87380 16777216" >> /etc/sysctl.conf
echo "net.ipv4.tcp_wmem = 4096 65536 16777216" >> /etc/sysctl.conf

# 增加最大缓冲区大小
echo "net.core.rmem_max = 16777216" >> /etc/sysctl.conf
echo "net.core.wmem_max = 16777216" >> /etc/sysctl.conf

# 增加默认缓冲区大小
echo "net.core.rmem_default = 1048576" >> /etc/sysctl.conf
echo "net.core.wmem_default = 1048576" >> /etc/sysctl.conf

连接处理优化

# 增加最大连接数
echo "net.core.somaxconn = 32768" >> /etc/sysctl.conf

# 增加等待连接队列大小
echo "net.ipv4.tcp_max_syn_backlog = 8192" >> /etc/sysctl.conf

# 启用TCP快速打开
echo "net.ipv4.tcp_fastopen = 3" >> /etc/sysctl.conf

拥塞控制算法

# 查看可用算法
sysctl net.ipv4.tcp_available_congestion_control

# 设置拥塞控制算法(推荐使用bbr或cubic)
echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf

2. 文件系统优化

大文件传输优化

# 增加文件描述符限制
echo "fs.file-max = 1000000" >> /etc/sysctl.conf
ulimit -n 1000000

# 使用更高效的文件传输工具(如bbcp、rsync with --partial等)

3. 网络协议栈优化

TCP参数调整

# 启用时间戳
echo "net.ipv4.tcp_timestamps = 1" >> /etc/sysctl.conf

# 启用选择性确认
echo "net.ipv4.tcp_sack = 1" >> /etc/sysctl.conf

# 调整keepalive时间
echo "net.ipv4.tcp_keepalive_time = 300" >> /etc/sysctl.conf
echo "net.ipv4.tcp_keepalive_probes = 5" >> /etc/sysctl.conf
echo "net.ipv4.tcp_keepalive_intvl = 15" >> /etc/sysctl.conf

4. 硬件和驱动优化

中断亲和性设置

# 查看网络接口的中断
cat /proc/interrupts | grep eth

# 设置中断亲和性(根据CPU核心数调整)
# 例如将eth0的中断绑定到CPU0
echo 1 > /proc/irq/[中断号]/smp_affinity

启用巨帧(如果网络支持)

ifconfig eth0 mtu 9000

5. 应用层优化

使用高效传输工具

  • rsyncrsync -avz --partial --progress source destination
  • bbcp: 专为高速网络设计的点对点拷贝工具
  • iperf3: 用于测试网络性能 iperf3 -c server_ip

多线程传输

# 使用axel多线程下载工具
axel -n 10 http://example.com/largefile.iso

# 使用parallel-rsync进行并行rsync传输

6. 应用后验证

# 应用所有sysctl设置
sysctl -p

# 验证当前TCP参数
sysctl -a | grep tcp

# 监控网络性能
iftop -n -i eth0
nload eth0

注意事项

  1. 根据实际硬件配置和网络环境调整参数值
  2. 修改前备份原始配置文件
  3. 生产环境建议先在测试环境验证
  4. 不同Linux发行版可能有细微差异
  5. 对于云环境,部分参数可能受限于云服务商设置

这些优化可以显著提高Linux系统在大流量传输场景下的性能,但最佳配置需要根据具体应用场景和硬件环境进行测试和调整。