架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2707|回复: 5

【实战】Docker 修改和限制容器CPU、内存等资源

[复制链接]
发表于 2022-8-6 13:55:37 | 显示全部楼层 |阅读模式
需求:在创建 docker 容器的时候,可以通过增加 -m 参数来限制容器的内存最大占用,如果容器已经创建完成,如何动态修改和限制容器CPU、内存等资源呢?

查看容器内存限制

宿主机安装了一个 8G 的内存条,创建了3个容器,其中限制 itsvse-redis 容器最大内存使用 512M,剩下两个容器则不做限制,如下图:

QQ截图20220806134815.jpg

输出信息格式详解

[CONTAINER]:以短格式显示容器的 ID。
[CPU %]:CPU 的使用情况。
[MEM USAGE / LIMIT]:当前使用的内存和最大可以使用的内存。
[MEM %]:以百分比的形式显示内存使用情况。
[NET I/O]:网络 I/O 数据。
[BLOCK I/O]:磁盘 I/O 数据。
[PIDS]:PID 号。

Docker update 命令

该docker update命令动态更新容器配置。您可以使用此命令来防止容器从其 Docker 主机消耗过多的资源。使用单个命令,您可以对单个容器或多个容器设置限制。要指定多个容器,请提供以空格分隔的容器名称或 ID 列表。

OPTIONS 说明

名称
描述
--blkio-weight
阻塞IO (相对权重),介于10到1000之间,0表示禁用(默认禁止)
--cpu-period
限制CPU CFS(完全公平的调度程序)期限
--cpu-quota
限制CPU CFS(完全公平的调度程序)配额
--cpu-rt-period
API 1.25+,将CPU实时时间限制为微秒
--cpu-rt-runtime
API 1.25+,将CPU实时运行时间限制为微秒
--cpu-shares, -c
CPU份额(相对权重)
--cpus
API 1.29+,CPU数量
--cpuset-cpus
允许执行的CPU(0-3,0,1)
--cpuset-mem
允许执行的MEM(0-3,0,1)
--kernel-memory
内核内存限制
--memory-swap
交换限制等于内存加交换,“-1”以启用无限交换
--memory-reservatio
内存软限制
--memory, -m
内存限制
--pids-limit
API 1.40+,调节容器pids限制(-1表示无限制)
--restart
容器退出时重新启动策略以应用

文档:https://docs.docker.com/engine/reference/commandline/update/

假设限制 php5-fpm 容器最大内存使用 1024M(1G),命令如下:

QQ截图20220806135452.jpg

(完)




上一篇:HTML5 之 PostMessage 跨窗口通信
下一篇:【转】一句 Task.Result 就死锁, 这代码还怎么写?
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2022-8-6 13:58:43 | 显示全部楼层
如果不设置 --memory-swap 参数,可能会报错:

Error response from daemon: Cannot update container ae7884f515f96cadab65668d6a44e13bb899c1e7fd411abcc88577a79d4302a3: Memory limit should be smaller than already set memoryswap limit, update the memoryswap at the same time
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2022-8-6 14:31:57 | 显示全部楼层
【实战】Linux 使用 lookbusy 模拟 CPU 占用率
https://www.itsvse.com/thread-10260-1-1.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2022-8-6 15:52:44 | 显示全部楼层
学习学习
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-7-1 21:46:50 | 显示全部楼层
Docker 内存、CPU 和 GPU 的运行时选项:https://docs.docker.com/config/containers/resource_constraints/

--memory-swap详情

--memory-swap是一个修饰符标志,仅当也设置时才有意义--memory。当容器耗尽所有可用 RAM 时,使用交换允许容器将多余的内存需求写入磁盘。对于经常将内存交换到磁盘的应用程序来说,性能会受到影响。

它的设置可能会产生复杂的效果:

如果--memory-swap设置为正整数,则 和 都--memory必须 --memory-swap设置。--memory-swap表示可以使用的内存和交换区的总量,并--memory控制非交换区内存的使用量。因此,如果--memory="300m"和--memory-swap="1g",容器可以使用 300m 内存和 700m ( 1g - 300m) 交换空间

如果--memory-swap设置为0,则忽略该设置,并且该值被视为未设置。

如果--memory-swap设置为与 相同的值--memory,并且--memory设置为正整数,则容器无权访问 swap。请参阅 防止容器使用交换。

如果--memory-swap未设置并--memory设置了 ,则容器可以使用与设置一样多的交换--memory(如果主机容器配置了交换内存)。例如,如果未设置--memory="300m"和--memory-swap,则容器总共可以使用 600m 的内存和交换空间。

如果--memory-swap显式设置为-1,则允许容器使用无限制的交换,最多可达主机系统上的可用数量。

在容器内部,诸如free报告主机可用交换的工具,而不是报告容器内可用的交换。不要依赖free或类似工具的输出来确定交换是否存在。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2024-2-16 04:07:22 | 显示全部楼层

如果 --memory-swap 未设置,--memory 设置了值,则 --memory-swap 默认值可以使用与 --memory 相同的内存,例如:--memory=1G,则,--memory-swap=2G(实际可以使用 1G 的交换空间),最终,容器则可以使用 2G(--memory 1G 空间+--memory-swap 1G 空间)的内存。

也就是说当 --memory 设置了值,--memory-swap 可以理解为总内存限制,可使用的交换空间等于 memory-swap 减去 memory 的值。

查看容器 --memory-swap 配置,命令如下:

QQ截图20240216040743.jpg

"Memory": 536870912, // 512M=536870912/1024/1024/1024
"MemoryReservation": 0,
"MemorySwap": 1073741824, // 1G=1073741824/1024/1024/1024
"MemorySwappiness": null,

上面的配置就是容器限制了内存 --memory=512M,未设置 --memory-swap。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-26 10:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表