温馨提示×

centos overlay为啥变慢

小樊
43
2026-10-03 06:14:33
栏目: 智能运维

在 CentOS 上 overlay(overlayfs,常见于 Docker、Kubernetes、容器存储)变慢,通常不是单一原因,而是下面几类问题叠加。我按「最常见 → 较少见」给你梳理一下,并给出排查方法。


一、最常见原因

1. 底层文件系统不是 overlay 的最佳搭档

overlay 推荐跑在:

  • xfs(开启 d_type)
  • ext4

❌ 常见坑:

  • xfs 没开 ftype=1(d_type)
  • 用了 NFS / CIFS / 某些网络盘 做 lower/upper
  • 用了 LVM thin pool 但配置不合理

检查 xfs 是否支持 d_type:

xfs_info /var/lib/docker | grep ftype

应该是:

ftype=1

如果是 ftype=0,Docker 会警告且性能极差。


2. overlay 层数太多(容器镜像层过深)

overlay 是 联合挂载:

  • lowerdir 越多 → 查找文件越慢
  • 特别是 ls、stat、open 频繁时

现象:

  • 容器内 ls 慢
  • 启动容器慢
  • 编译、构建变慢

✅ 优化:

  • 合并 RUN 指令(减少镜像层)
  • 避免无用层
  • 使用 docker build --squash

3. upperdir / workdir 在慢盘上

overlay 的写操作只发生在:

  • upperdir
  • workdir

如果这些在:

  • HDD
  • 云盘(低 IOPS)
  • 和系统盘抢 IO

就会明显变慢。

建议:

# Docker
/var/lib/docker/overlay2  → SSD

# K8s
/var/lib/containers → SSD

4. inode 耗尽(非常隐蔽)

overlay 对 inode 极敏感。

检查:

df -i /var/lib/docker

即使磁盘空间还有,inode 满也会:

  • 创建文件超慢
  • 容器卡死
  • 莫名其妙报错

二、系统 / 内核相关

5. CentOS 老内核 bug

CentOS 7 默认内核:

  • 3.10.x
  • overlay 早期实现有性能问题

✅ 建议:

  • CentOS 7 → 升级到 kernel 4.x+
  • CentOS 8 / Stream → 基本稳定

6. SELinux 开销

在 CentOS 上:

  • SELinux 开启时,overlay 有额外审计和标签操作

判断:

getenforce

如果是 Enforcing 且性能异常:

  • 可临时测试:
setenforce 0

三、容器使用方式问题

7. 小文件大量读写(日志 / 临时文件)

overlay 不适合:

  • 高频小文件写
  • 日志狂写

正确做法:

  • 日志挂 volume
  • /tmp 挂 tmpfs
  • 避免写容器层

8. 并发容器过多

overlay 在多容器同时:

  • pull
  • delete
  • commit

会出现锁竞争


四、快速自查清单(建议你照着做)

# 1. 文件系统类型
df -T /var/lib/docker

# 2. xfs d_type
xfs_info /var/lib/docker | grep ftype

# 3. inode
df -i

# 4. IO 等待
iostat -x 1

# 5. 挂载参数
mount | grep overlay

五、常见结论一句话总结

CentOS 上 overlay 变慢,80% 是:xfs 没开 d_type / upper 在慢盘 / inode 满 / 镜像层太深

如果你愿意,可以把下面信息发我,我可以直接帮你定位:

  • CentOS 版本
  • Docker / K8s 版本
  • mount | grep overlay
  • df -i
  • 具体“慢”的场景(启动?IO?ls?)

0 踩