docker系列-限制容器的内存使用

本文讲解了Docker中如何通过-m或--memory参数设置容器内存使用限额,如100M、2G;通过--memory-swap参数设置内存加swap使用限额。若未指定数字,参数默认为-1,即不限制。并介绍了使用progrium/stress镜像进行压力测试的方法。

通常情况下我们是不需要对容器进行任何的资源限制的,但是在现实的部署中,我们必然会遇到就是服务器的资源不足等的硬件资源限制。

在Docker 中通过下面两组参数来控制容器内存的使用量。
1.-m 或 --memory:设置内存的使用限额,例如 100M, 2G。
2.–memory-swap:设置 内存+swap 的使用限额。
在实际运用的时候,我们不添加任何的数字限制内存大小时,上面两组参数为 -1,即对容器内存和 swap 的使用没有限制。

我们可以使用 progrium/stress 镜像来学习如何为容器分配内存。该镜像可用于对容器执行压力测试。

在这里插入图片描述

直接运行命令docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
就会在dockerhub中将 progrium/stress 镜像pull到本地并进行启动

其中
–vm 1:启动 1 个内存工作线程
–vm-bytes 280M:每个线程分配 280M 内存
如果在启动容器时只指定 -m 而不指定 --memory-swap,那么 --memory-swap 默认为 -m 的两倍

### 容器返回码 137 的原因与解决方案 当容器状态显示为 `Exited (137)` 时,通常表示容器内的主进程收到了 `SIGKILL` 信号,被系统强制终止。这通常由资源限制(如内存不足)或健康检查失败引起。 #### 原因分析 - **内存不足导致 OOMKilled**:如果容器内存使用超过了系统或 Docker 配置的限制,内核的 OOM(Out Of Memory)机制会强制终止该容器进程,从而导致返回码 137 [^2]。 - **CPU 资源限制**:在某些情况下,如果容器限制了 CPU 使用时间,且超出了允许的配额,也可能被强制终止 [^2]。 - **健康检查失败**:如果容器的健康检查多次失败,某些编排系统(如 Kubernetes 或 Rancher)可能会主动终止该容器 [^1]。 - **系统或 Docker 守护进程重启**:在 Docker 守护进程异常重启的情况下,正在运行的容器可能被强制终止 [^2]。 #### 解决方案 - **检查容器资源配置**:使用 `docker inspect <容器ID>` 查看容器的资源配置,尤其是 `HostConfig` 中的内存限制(`Memory`)和 CPU 配置。如果内存限制过低,可以调整后重新启动容器: ```bash docker run -d --memory="2g" --cpus="1.5" <镜像名称> ``` - **查看容器日志**:使用 `docker logs <容器ID>` 查看容器退出前的日志输出,有助于定位是否因应用崩溃或资源不足导致退出 [^2]。 - **检查系统 OOM 日志**:在宿主机上查看系统日志,确认是否因 OOM 导致容器被杀死: ```bash dmesg | grep -i kill ``` 如果输出中包含类似 `oom_kill` 的信息,则说明容器内存不足被系统强制终止 。 - **调整健康检查策略**:如果容器因健康检查失败被终止,可以在 `docker-compose.yml` 或部署文件中调整健康检查的重试次数和超时时间,确保应用有足够时间启动 [^1]。 #### 示例:调整内存限制并重新运行容器 ```bash docker run -d --name my_container --memory="2g" --memory-swap="-1" my_image ``` 此命令设置了容器的最大内存为 2GB,并禁用 Swap(`--memory-swap="-1"`),防止使用虚拟内存---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hugo_Hoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值