温馨提示×

Docker性能调优在CentOS上如何进行

小樊
34
2025-12-13 11:28:32
栏目: 智能运维

CentOS 上 Docker 性能调优实战指南

一 存储与镜像优化

  • 使用高性能存储驱动:优先选择 overlay2(现代内核与 Docker 的推荐驱动),在 /etc/docker/daemon.json 中配置: { “storage-driver”: “overlay2” } 修改后执行:systemctl daemon-reload && systemctl restart docker。该驱动在多数工作负载下具备更好的 I/O 性能与稳定性
  • 数据目录与磁盘选择:将 /var/lib/docker 迁移至 SSD/NVMe 或大容量分区,避免与系统盘争用;迁移步骤:
    1. systemctl stop docker
    2. mv /var/lib/docker /home/data/docker
    3. ln -sf /home/data/docker /var/lib/docker
    4. systemctl start docker
    5. docker info | grep “Docker Root Dir” 验证
  • 镜像瘦身与构建优化:采用 多阶段构建、选择 Alpine 等轻量基础镜像,减少镜像层数与体积,显著缩短 拉取与启动时间
  • 定期清理:执行 docker system prune -a 清理悬空镜像、停止容器与无用网络,避免空间膨胀带来的性能劣化。

二 资源限制与容器隔离

  • CPU 控制:
    • 限制可用核数:–cpus=2
    • 绑定 CPU 核心:–cpuset-cpus=0,2(仅使用核心 0 与 2)
  • 内存控制:
    • 限制最大内存:–memory=512m
    • 内存+Swap 总量:–memory-swap=1g
  • 磁盘 I/O 控制:–blkio-weight=500(相对权重,范围 10–1000)
  • 设备带宽限制:–device-read-bps=/dev/sda:1mb、–device-write-bps=/dev/sda:1mb
  • 运行时默认限制:在 daemon.json 中设置 default-ulimits,如: { “default-ulimits”: { “nofile”: { “Name”: “nofile”, “Soft”: 65536, “Hard”: 65536 } } }
  • 编排场景(Compose):在服务下配置 resources.limits/requests,便于统一治理与调度。

三 网络性能优化

  • 网络模式取舍:
    • 低开销优先:在隔离允许的前提下使用 –net=host,可绕过 NAT/iptables 转发带来的额外消耗,吞吐与延迟表现更接近物理机;注意端口冲突与安全风险。
    • 多容器互通:默认 bridge 模式便于隔离与端口映射,但在高并发短连接场景存在 iptables/NAT 开销;可通过调整 conntrack、优化规则或改用 host/其他网络方案权衡。
  • 带宽整形与 QoS:对关键业务或共享链路使用 tc 做流量整形,例如限制某网口为 100mbit: tc qdisc add dev eth0 root handle 1: htb tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.0/24 flowid 1:1
  • 大规模集群网络:考虑 Calico/Flannel/Cilium 等 CNI 插件以获得更好的 可扩展性与网络性能

四 系统内核与 Docker 守护进程调优

  • 内存与交换:适度降低 vm.swappiness(如设为 10),减少换页对延迟敏感应用的影响;仅在明确需要时再考虑为容器设置内存交换策略。
  • 网络栈优化:提升 TCP 缓冲区以减少长肥管道抖动与重传: sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216
  • 镜像加速:为国内环境配置 registry-mirrors,加速拉取并缩短部署时间: { “registry-mirrors”: [“https://.mirror.aliyuncs.com”] }
  • 安全与性能平衡:生产环境不建议直接关闭 SELinuxfirewalld;如为压测或受控环境,可临时停用以排除干扰,但需充分评估风险并恢复加固。

五 监控与容量规划

  • 容器层监控:使用 docker stats 实时查看 CPU、内存、网络 I/O,结合阈值告警与 HPA/手动扩缩容策略,避免资源争用。
  • 节点层监控:结合 iftop/nload/sar 等工具观察宿主机 带宽、负载、I/O,定位瓶颈所在层级(网络/磁盘/CPU)。
  • 容量评估:在 8GB 内存 等受限环境下,合理设置容器 requests/limits、控制并发实例数,并通过清理与压缩镜像降低系统压力。

0