限制Docker容器资源

目录

前言

解决方案

安装stress压力测试工具

1.创建一个新的文件夹存放Dockerfile文件

2.编写Dockerfile文件

3.构建stress镜像

测试内存压力

1.启动测试工具

2.查看内存使用率

测试CPU压力

1.查看主机CPU的个数和每个CPU的核心数

2.开启容器模拟对于CPU资源的占用

3.查看CPU分配率


前言

限制容器资源的使用对于容器的正常运行十分重要,目的是防止资源耗尽,确保系统稳定性。以下我将从内存和 CPU 方面的限制介绍具体限制的方法。

内存限制:避免单个容器因内存泄漏或异常行为耗尽主机内存,触发系统级OOM(Out of Memory)事件,导致关键进程被终止。

CPU限制:防止CPU密集型任务独占核心资源,导致其他容器或宿主机服务响应延迟。

解决方案

安装stress压力测试工具

1.创建一个新的文件夹存放Dockerfile文件

mkdir stress
cd stress/
vim Dockerfile

2.编写Dockerfile文件

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y stress && rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["/usr/bin/stress", "--verbose"]
CMD []

FROM ubuntu:22.04选择22.04版本的ubuntu作为基础镜像。

RUN apt-get update && apt-get install -y stress,更新软件包列表并安装 stress 工具,-y 参数自动确认安装;rm -rf /var/lib/apt/lists/* 清理 apt 缓存以减小镜像体积。

ENTRYPOINT ["/usr/bin/stress", "--verbose"]设置容器启动时默认执行的命令为 stress --verbose--verbose 输出详细日志)。

CMD []显式声明空参数列表,允许用户通过 docker run 覆盖 stress 的参数(如 --cpu 4)。

3.构建stress镜像

docker build -t stress .

利用编写好的Dockerfile文件在构建镜像。

测试内存压力

1.启动测试工具

docker run -it -m 300M --memory-swap=400M stress --vm 1 --vm-bytes 390M

这里启动一个stress容器,并且限制容器的内存+交换空间为400M,-m设置了物理内存最大为300M,--vm-bytes设置一个内存测试进程的大小为390M(-m、--memory-swap对所有容器适用,--vm-bytes是stress测试工具的参数)。

标准输出表示 stress 正在尝试分配约390MB内存​(408944640 bytes ≈ 390MB)。此操作将使容器内的内存使用接近限制值,可能会触发 OOM 机制导致进程容器强行停止。

2.查看内存使用率

新开一个新的窗口连接原来的操作系统,查看容器的ID,并根据容器的ID查看容器的状态,可以看到MEM%的使用率非常接近100%,说明此时内存压力测试进程在限制了内存和交换空间的情况下对于内存的开销非常大。

测试CPU压力

1.查看主机CPU的个数和每个CPU的核心数

sudo cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
cat /proc/cpuinfo | grep "cpu cores" | uniq

第一个命令是查看 /proc/cpuinfo 文件下有关 physical id 的配置,并通过 wc -l 来统计CPU数量。

第二个命令是查看 /proc/cpuinfo 文件下有关的 cpu cores 的配置,可以查看到每个CPU的核心数。

2.开启容器模拟对于CPU资源的占用

docker run --name containerA -d -c 1024 stress --cpu 2
docker run --name containerB -d -c 512 stress --cpu 2

--cpu 2 表示在容器内启动 2 哥消耗 CPU 的进程,模拟容器对于 CPU 资源的占用,并且通过 -c 给不同容器设置不同份额,A 和 B 的配额比为2:1(相对配额越大,在 CPU 紧张时获取 CPU 的时间相对越多)。

3.查看CPU分配率

可以看到 containerA 对于 CPU 的使用率明显比 containerB 更高,说明设置配额比生效。

当暂停 containerA 容器的时候,B 容器的 CPU 使用率明显升高,因为原来分配给 A 容器的 CPU 资源在 A 暂停后会被其他容器所使用。

通过对于容器资源分配的限制,我们可以更好地管理容器和资源,根据应用需求分配资源(如数据库容器分配更多内存,批处理任务限制CPU),避免资源浪费。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值