网络性能优化
核心知识点
1. 网络性能基础
1.1 网络性能指标
┌─────────────────────────────────────────────────────┐
│ 网络性能指标 │
├─────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 带宽 │ │ 吞吐量 │ │ 延迟 │ │
│ │ │ │ │ │ │ │
│ │ Mbps │ │ MB/s │ │ ms │ │
│ │ Gbps │ │ 包/秒 │ │ 抖动 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 丢包率 │ │ 连接数 │ │ 重传率 │ │
│ │ │ │ │ │ │ │
│ │ % │ │ 当前 │ │ % │ │
│ │ │ │ 最大 │ │ │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
└─────────────────────────────────────────────────────┘1.2 TCP/IP 协议栈
┌─────────────────────────────────────────────────────┐
│ TCP/IP 协议栈 │
├─────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ 应用层 │ │
│ │ HTTP, FTP, SMTP, DNS, SSH │ │
│ └─────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────┐ │
│ │ 传输层 │ │
│ │ TCP, UDP, SCTP │ │
│ └─────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────┐ │
│ │ 网络层 │ │
│ │ IP, ICMP, IGMP │ │
│ └─────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────┐ │
│ │ 链路层 │ │
│ │ Ethernet, Wi-Fi, PPP │ │
│ └─────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────┘1.3 网络性能瓶颈
| 瓶颈类型 | 表现 | 原因 |
|---|---|---|
| 带宽限制 | 吞吐量低 | 网络带宽不足、拥塞 |
| 高延迟 | 响应时间长 | 路由跳数多、网络拥塞 |
| 丢包 | 重传率高 | 网络质量差、拥塞 |
| 连接数限制 | 拒绝连接 | 系统限制、配置不当 |
| CPU 瓶颈 | 软中断高 | 网络流量大、单核处理 |
2. 网络监控工具
2.1 基础监控工具
# ifconfig - 网络接口配置
ifconfig
ifconfig eth0
# ip - 网络配置工具
ip addr show
ip link show
ip route show
# netstat - 网络统计
netstat -an
netstat -s
netstat -i
# ss - 套接字统计
ss -s
ss -tunap2.2 流量监控工具
# iftop - 实时流量监控
iftop
iftop -i eth0
# nload - 流量监控
nload
nload -t 1000 -l 10
# bmon - 带宽监控
bmon
bmon -o curses
# iptraf - 交互式流量监控
iptraf
iptraf-ng2.3 连接监控
# 查看连接数
ss -s
netstat -an | wc -l
# 查看各状态连接
ss -tan state established
ss -tan state time-wait
ss -tan state close-wait
# 查看连接详情
ss -tnp
netstat -tnp
# 查看连接统计
netstat -s | grep -i tcp2.4 性能测试工具
# ping - 延迟测试
ping -c 100 google.com
# traceroute - 路由跟踪
traceroute google.com
tracepath google.com
# mtr - 网络诊断
mtr google.com
# iperf3 - 带宽测试
iperf3 -s
iperf3 -c <server-ip> -t 603. TCP 参数优化
3.1 TCP 连接优化
# 增加 TCP 连接队列
echo 4096 > /proc/sys/net/core/somaxconn
echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog
# 减少 TIME_WAIT 状态时间
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
# 启用 TIME_WAIT 重用
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
# 永久设置
echo "net.core.somaxconn = 4096" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 4096" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf3.2 TCP 缓冲区优化
# 调整 TCP 读写缓冲区
echo 87380 > /proc/sys/net/ipv4/tcp_rmem_min
echo 174760 > /proc/sys/net/ipv4/tcp_rmem_default
echo 349520 > /proc/sys/net/ipv4/tcp_rmem_max
echo 16384 > /proc/sys/net/ipv4/tcp_wmem_min
echo 131072 > /proc/sys/net/ipv4/tcp_wmem_default
echo 262144 > /proc/sys/net/ipv4/tcp_wmem_max
# 调整 TCP 自动调优
echo 1 > /proc/sys/net/ipv4/tcp_moderate_rcvq
# 永久设置
echo "net.ipv4.tcp_rmem = 87380 174760 349520" >> /etc/sysctl.conf
echo "net.ipv4.tcp_wmem = 16384 131072 262144" >> /etc/sysctl.conf
echo "net.ipv4.tcp_moderate_rcvq = 1" >> /etc/sysctl.conf3.3 TCP 拥塞控制优化
# 查看可用拥塞控制算法
sysctl net.ipv4.tcp_available_congestion_control
# 设置拥塞控制算法
echo bbr > /proc/sys/net/ipv4/tcp_congestion_control
# 其他可用算法:cubic, reno, htcp, vegas
# 永久设置
echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf3.4 TCP 快速打开
# 启用 TCP Fast Open
echo 3 > /proc/sys/net/ipv4/tcp_fastopen
# 永久设置
echo "net.ipv4.tcp_fastopen = 3" >> /etc/sysctl.conf4. 网络参数优化
4.1 网络缓冲区优化
# 调整网络缓冲区
echo 262144 > /proc/sys/net/core/rmem_default
echo 262144 > /proc/sys/net/core/rmem_max
echo 262144 > /proc/sys/net/core/wmem_default
echo 262144 > /proc/sys/net/core/wmem_max
# 调整 netdev_max_backlog
echo 5000 > /proc/sys/net/core/netdev_max_backlog
# 永久设置
echo "net.core.rmem_default = 262144" >> /etc/sysctl.conf
echo "net.core.rmem_max = 262144" >> /etc/sysctl.conf
echo "net.core.wmem_default = 262144" >> /etc/sysctl.conf
echo "net.core.wmem_max = 262144" >> /etc/sysctl.conf
echo "net.core.netdev_max_backlog = 5000" >> /etc/sysctl.conf4.2 连接跟踪优化
# 增加 conntrack 表大小
echo 262144 > /proc/sys/net/netfilter/nf_conntrack_max
# 调整 conntrack 超时
echo 120 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
# 永久设置
echo "net.netfilter.nf_conntrack_max = 262144" >> /etc/sysctl.conf
echo "net.netfilter.nf_conntrack_tcp_timeout_established = 120" >> /etc/sysctl.conf4.3 IP 参数优化
# 启用 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 禁用 ICMP 重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 启用 SYN cookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# 永久设置
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.send_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf5. 网络性能测试
5.1 带宽测试
# 使用 iperf3 测试带宽
# 服务端
iperf3 -s
# 客户端
iperf3 -c <server-ip> -t 60
iperf3 -c <server-ip> -t 60 -P 4
# 测试 UDP
iperf3 -c <server-ip> -u -b 1G
# 测试双向
iperf3 -c <server-ip> -d5.2 延迟测试
# 使用 ping 测试延迟
ping -c 100 google.com
# 使用 mtr 测试延迟
mtr -c 100 google.com
# 使用 hping3 测试延迟
hping3 -c 100 -i u1000 google.com5.3 丢包测试
# 使用 ping 测试丢包
ping -c 1000 google.com | grep "packet loss"
# 使用 mtr 测试丢包
mtr -c 100 -r google.com
# 使用 hping3 测试丢包
hping3 -c 1000 -i u1000 google.com5.4 连接测试
# 测试最大连接数
ab -n 10000 -c 1000 http://localhost/
# 测试并发连接
wrk -t12 -c400 -d30s http://localhost/
# 测试长连接
ab -n 10000 -c 100 -k http://localhost/实用案例分析
案例 1:优化 Web 服务器网络性能
场景描述
Web 服务器网络吞吐量低,响应时间长。
操作步骤
# 1. 监控网络性能
iftop
nload
ss -s
# 2. 分析网络瓶颈
netstat -an | wc -l
netstat -s | grep -i tcp
# 3. 优化 TCP 参数
echo 4096 > /proc/sys/net/core/somaxconn
echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
# 4. 优化 TCP 缓冲区
echo 87380 174760 349520 > /proc/sys/net/ipv4/tcp_rmem
echo 16384 131072 262144 > /proc/sys/net/ipv4/tcp_wmem
# 5. 启用 BBR 拥塞控制
echo bbr > /proc/sys/net/ipv4/tcp_congestion_control
# 6. 优化 Web 服务器配置
# 启用 Keep-Alive
# 启用压缩
# 使用 CDN
# 7. 优化应用层
# 减少请求数
# 使用缓存
# 异步处理
# 8. 验证优化效果
iftop
ab -n 10000 -c 100 http://localhost/案例 2:优化数据库网络性能
场景描述
数据库网络延迟高,影响查询性能。
操作步骤
# 1. 监控网络延迟
ping -c 100 <db-server>
mtr -c 100 <db-server>
# 2. 分析网络问题
traceroute <db-server>
netstat -s | grep -i tcp
# 3. 优化 TCP 参数
echo 1 > /proc/sys/net/ipv4/tcp_low_latency
echo 1 > /proc/sys/net/ipv4.tcp_no_metrics_save
# 4. 优化 TCP 缓冲区
echo 174760 > /proc/sys/net/ipv4/tcp_rmem_default
echo 349520 > /proc/sys/net/ipv4/tcp_rmem_max
# 5. 启用 TCP Fast Open
echo 3 > /proc/sys/net/ipv4/tcp_fastopen
# 6. 优化网络配置
# 使用专用网络
# 减少网络跳数
# 使用更快的网络设备
# 7. 优化数据库配置
# 启用连接池
# 调整超时时间
# 使用压缩
# 8. 验证优化效果
ping -c 100 <db-server>
mysql -h <db-server> -e "SELECT 1;"案例 3:优化高并发网络应用
场景描述
高并发网络应用连接数受限。
操作步骤
# 1. 监控连接数
ss -s
netstat -an | wc -l
# 2. 查看系统限制
ulimit -n
cat /proc/sys/fs/file-max
# 3. 增加文件描述符限制
ulimit -n 65535
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
# 4. 增加 TCP 连接队列
echo 4096 > /proc/sys/net/core/somaxconn
echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog
# 5. 减少 TIME_WAIT 状态
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
# 6. 增加 conntrack 表
echo 262144 > /proc/sys/net/netfilter/nf_conntrack_max
# 7. 优化应用层
# 使用连接池
# 使用异步 I/O
# 使用事件驱动
# 8. 验证优化效果
ss -s
ab -n 10000 -c 1000 http://localhost/最佳实践
- 启用 BBR 拥塞控制:提升网络吞吐量。
echo bbr > /proc/sys/net/ipv4/tcp_congestion_control- 优化 TCP 缓冲区:根据网络带宽调整。
echo 87380 174760 349520 > /proc/sys/net/ipv4/tcp_rmem- 增加连接队列:支持更多并发连接。
echo 4096 > /proc/sys/net/core/somaxconn- 减少 TIME_WAIT 状态:重用连接。
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse使用连接池:减少连接建立开销。
启用 TCP Fast Open:减少连接延迟。
echo 3 > /proc/sys/net/ipv4/tcp_fastopen监控网络性能:及时发现性能问题。
定期测试网络:验证网络性能。
总结
本教程详细介绍了 Linux 系统网络性能优化的方法和工具。通过实际案例,我们学习了如何优化 TCP 参数、调整网络缓冲区、配置拥塞控制以及测试网络性能。掌握这些知识后,可以显著提升系统网络吞吐量和降低延迟。