docker资源限制

2023-12-21 21:00:27

默认情况下,容器没有资源使用限制,可以使用主机内核调度程序允许的尽可能多的资源
Docker提供了控制容器使用资源的方法,可以限制容器使用多少内存或CPU等
docker info命令可以查看内核中的某项特性警告(在输出结尾处)

修改内核参数 /etc/default/grub
vim /etc/default/grub

OOM(Out of Memory Exception)

若没有足够的内存来执行其他重要的系统任务,将会抛出OOM,随后系统会开始杀死进程以释放内存,凡是运行在宿主机的进程都有可能被kill
产生OOM异常时,Dockerd尝试通过调整Docker守护程序的OOM优先级来减轻这些风险,但是容器的OOM优先级并未调整,这使得容器被杀死可能性更大
不推荐通过守护程序或容器上手动设置--oom-score-adj为极端负数,或通过在容器上设置--oom-kill-disable来绕过这些安全措施

OOM优先级机制

linux会为每个进程算一个分数,最终将分数最高的kill
/proc/PID/oom_score_adj
范围为-1000到1000,值越高容易被宿主机kill掉,如果将该值设置为-1000,则进程永远不会被kill
/proc/PID/oom_adj
范围为-17到+15,取值越高越容易被干掉,如果是-17,则表示不能被kill
/proc/PID/oom_score
这个值是系统综合进程的内存消耗量、CPU时间和oom_adj计算出的进程得分,消耗内存越多得分越高,容易被宿主机kernel强制杀死

stress-ng压力测试工具

stress-ng是一个压力测试工具,可以通过软件仓库进行安装,也提供了docker版本的容器

stress-ng安装

软件包安装

Centos:yum -y install stress-ng
Ubuntu:apt -y install stress-ng

容器方式安装

docker pull lorel/docker-stress-ng

stress-ng 使用

docker run -it --rm lorel/docker-stress-ng
格式:stress-ng [OPTION [ARG]]

容器内存限制

Docker可以强制执行硬件内存限制,即只允许容器使用给定的内存大小
Docker也可以执行非硬性内存限制,即容器可以使用尽可能多的内存

内存相关选项

b k m g 表示字节,千字节,兆字节或千兆字节
-m --memory=????
容器可以使用的最大物理内存量,硬限制,此选项最小允许值为
4m
--memory-swap????
允许此容器交换到磁盘的内存量 , 必须先用 -m 对内存限制才可以使用 ,
细说明如下
-- memory -swappiness??
设置容器使用交换分区的倾向性,值越高表示越倾向于使用 swap
区,范围为 0-100 0 为能不用就不用, 100 为能用就用, N 表示内存使
用率达到 N% 时,就会使用 swap 空间
-- memory -reservation
允许指定小于 --memory 的软限制 ,当 Docker 检测到主机上的争用或
内存不足时会激活该限制,如果使 -- memory-reservation ,则必须将
其设置为低于 --memory 才能使其优先生效。 因为它是软限制,所以
不能保证容器不超过限制
-- kernel - memory
容器可以使用的最大内核内存量,最小为 4m ,由于内核内存与用户空
间内存隔离,因此无法与用户空间内存直接交换,因此内核内存不足的
容器可能会阻塞宿主机资源,这会对主机和其他容器或者其他服务进程
产生影响,因此不建议设置内核内存大小
-- oom - kill - disable
默认情况下,如果发生内存不足( OOM )错误,则内核将终止容器中
的进程。要更改此行为,请使用该 -- oom - kill - disable 选项。建议仅在
设置了该 - m/ -- memory 选项的容器上禁用 OOM 。如果 - m 未设置该标
志,则主机可能会用完内存,内核可能需要终止主机系统的进程以释放
内存

文章来源:https://blog.csdn.net/qq_54363472/article/details/135134108
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。