温馨提示×

ubuntu docker为何占用高

小樊
57
2026-09-16 12:32:04
栏目: 智能运维

在 Ubuntu 上 Docker 占用高(CPU / 内存 / 磁盘)通常是以下几类原因导致的,我按「最常见 → 较少见」给你梳理,并给出排查和解决办法。


一、最常见原因

1️⃣ 容器本身在“跑活”

很多情况下不是 Docker 的问题,而是容器里的程序在消耗资源。

排查:

docker stats

可以看到每个容器的:

  • CPU
  • 内存
  • 网络
  • 磁盘 IO

常见 culprit:

  • Java / Python 服务死循环
  • 日志疯狂打印
  • 定时任务重复执行
  • 爬虫 / 训练任务

✅ 解决:

  • 限制资源
docker run -m 512m --cpus=1 ...
  • 或优化容器内程序

2️⃣ 日志文件爆炸(非常常见)

Docker 默认日志不限制大小。

/var/lib/docker/containers/*/*-json.log

现象:

  • 磁盘占用高
  • Docker 变慢
  • 系统卡顿

解决(推荐): 编辑 /etc/docker/daemon.json

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

然后:

sudo systemctl restart docker

3️⃣ 大量未清理的镜像 / 容器 / 卷

很多人跑测试、构建镜像,但不清理。

查看占用:

docker system df

清理(慎用):

docker system prune -a

(会删除未使用镜像、容器、网络)


二、Docker 服务本身的问题

4️⃣ dockerd 占用 CPU 高

可能原因:

  • 磁盘 IO 慢(机械盘 / 云盘)
  • 存储驱动问题
  • 容器数量极多(上千)

检查:

top

看是否是 dockerd 或 containerd

建议:

  • 使用 overlay2(默认已用)
  • 不要用 aufs
  • 使用 SSD

5️⃣ Containerd / runc 异常

Ubuntu 20.04+ 默认使用 containerd。

异常表现:

  • docker 命令卡
  • CPU 飙高

重启试试:

sudo systemctl restart containerd
sudo systemctl restart docker

三、系统层面原因

6️⃣ Swap 没开 / 内存不足

内存不够时:

  • Docker 频繁 OOM
  • 系统频繁回收内存

检查:

free -h

建议服务器开 swap(哪怕 2G)。


7️⃣ 磁盘满导致 Docker 假死

df -h

如果 /var/lib/docker 所在盘 100%:

  • Docker 会异常占用资源

四、快速自查清单 ✅

docker stats
docker system df
df -h
free -h
top

五、如果你愿意

你可以直接贴出:

  • docker stats 输出
  • top / htop 截图
  • Ubuntu 版本
  • Docker 版本

我可以帮你精准判断是哪一个容器或配置在吃资源。

0 踩