网络延迟优化
容器网络延迟直接影响应用性能,下面介绍优化方法。
MTU 配置
默认 MTU 问题
Bash
# 查看默认 MTU
docker network inspect bridge | grep MTU
# 输出
"MTU": 1500 # 可能与物理网络不匹配
调整 MTU
JSON
// /etc/docker/daemon.json
{
"mtu": 1450 // 匹配物理网络
}
Bash
# 重启生效
sudo systemctl restart docker
MTU 不匹配导致分片,增加延迟。应与物理网络 MTU 匹配。
网络驱动选择
| 驱动 | 延迟 | 适用场景 |
|---|---|---|
| host | 最低 | 高性能网络 |
| bridge | 中 | 通用 |
| overlay | 高 | 跨主机 |
Bash
# 低延迟场景使用 host 网络
docker run -d --network host my-high-throughput-app
TCP 优化
Bash
# 容器内 TCP 调优
docker run -d \
--sysctl net.core.rmem_max=16777216 \
--sysctl net.core.wmem_max=16777216 \
--sysctl net.ipv4.tcp_rmem='4096 87380 16777216' \
--sysctl net.ipv4.tcp_wmem='4096 65536 16777216' \
my-app
缓冲区优化
Bash
# 增加网络缓冲区
docker run -d \
--sysctl net.core.netdev_max_backlog=262144 \
--sysctl net.core.somaxconn=65535 \
my-app
多队列网卡
Bash
# 启用 RSS (Receive Side Scaling)
ethtool -L eth0 combined 8
# 绑定 IRQ 到特定 CPU
for i in $(seq 0 7); do
echo $i > /proc/irq/$i/smp_affinity
done
监控网络延迟
Bash
# 容器内测试延迟
docker exec my-app ping -c 10 target-host
# 查看网络统计
docker exec my-app netstat -s
# 抓包分析
docker exec my-app tcpdump -i eth0 port 80
要点总结
- MTU 配置匹配物理网络,避免分片增加延迟
- 低延迟场景使用 host 网络驱动,避免 NAT 开销
- TCP 缓冲区优化提升高吞吐场景性能
- 多队列网卡 + RSS 分散中断到多 CPU
--sysctl运行时调整网络内核参数
📝 发现内容有误?点击此处直接编辑