温馨提示×

centos docker为何占用内存高

小樊
40
2026-09-11 17:18:02
栏目: 智能运维

CentOS 上 Docker 占用内存高,通常不是 Docker“本身”吃内存,而是容器、镜像、存储驱动或系统配置导致的。下面按常见原因给你一个排查思路。


一、最常见原因

1️⃣ 容器本身吃内存(最常见)

Docker 只是“跑进程的壳”,真正占内存的是容器里的应用。

查看方式:

docker stats

看 MEM USAGE / LIMIT。

常见情况:

  • Java 应用没设 -Xmx
  • MySQL / Redis 没限制内存
  • Node / Python 服务内存泄漏

✅ 解决:

  • 给容器加内存限制
docker run -m 512m --memory-swap=512m xxx
  • 应用层优化(最重要)

2️⃣ Docker 存储驱动导致内存增长(CentOS 老系统高发)

CentOS 7 默认常用:

  • devicemapper(老,容易吃内存/磁盘)
  • overlay2(推荐)

查看:

docker info | grep Storage

如果是 devicemapper:

  • 会缓存大量元数据
  • 容器多时内存明显上涨

✅ 解决:

  • 使用 overlay2
# /etc/docker/daemon.json
{
  "storage-driver": "overlay2"
}

然后重启 docker


3️⃣ 容器日志无限增长(隐藏内存杀手)

Docker 默认日志不限制:

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

日志变大 → dockerd 占用内存上涨

✅ 解决:

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

4️⃣ 僵尸容器 / 停止容器未清理

很多人跑了大量:

  • 测试容器
  • 停止但没删的容器

查看:

docker ps -a

✅ 清理:

docker container prune
docker image prune

5️⃣ dockerd 本身内存泄漏(老版本 Docker)

CentOS 自带的 Docker 经常很老(如 1.13 / 18.03)

查看:

docker version

✅ 建议:

  • 升级 Docker(≥ 20.10)
  • 或定期重启 docker

6️⃣ CentOS 系统 cache 被误认为 Docker 占用

Linux 会把内存用于:

  • page cache
  • inode cache
free -h

如果 buff/cache 很大,但 available 也大,那是正常的

✅ 不算 Docker 问题


二、快速排查命令合集

# 容器内存占用
docker stats

# Docker 信息
docker info

# 系统内存
free -h

# docker 进程内存
ps aux | grep dockerd

# 日志大小
du -sh /var/lib/docker/containers/*

三、如果你是这些情况之一

你可以告诉我:

  • CentOS 版本(7?8?)
  • Docker 版本
  • docker info 输出
  • docker stats 截图

我可以直接帮你判断是哪一块在吃内存。

0 踩