一、CGroups 关于mememory的限制操作
cgroup关于cpu操作 关于memeory cgroup的几个要点
① memeory限额类
1、memory.limit_bytes:'硬限制'--> 限制'最大内存'使用量,单位有k、m、g三种,填-1则代表无限制,默认是'字节'2、memory.soft_limit_bytes:'软限制',只有比强制限制设置的值'小'时才有意义,填写'格式同上'场景:1) 当整体内存'紧张'的情况下,task 获取的内存就'被限制'在软限制额度之内2) 以保证不会有太多进程'因内存挨饿';可以看到加入了内存的资源限制'并不代表'没有资源竞争3、memory.memsw.limit_bytes:设定'最大内存'与 'swap 区'内存'之和'的用量限制,填写格式同上
② memeory报警与自动控制
4、memory.oom_control:1) 该'参数'填 0 或 12) '0表示开启',当 cgroup 中的进程使用资源'超过界限时'立即杀死进程,'1'表示'不启用'3) '默认'情况下,包含 memory 子系统的 cgroup 都'启用'4) 当oom_control'不启用',实际使用内存'超过界限时'进程会'被暂停'直到有空闲的内存资源
③ memeory统计与监控
5、memory.usage_bytes:统计'该 cgroup 中进程'使用的当前总内存用量,以'字节'为单位6、memory.max_usage_bytes:统计报告该 cgroup 中进程使用的'最大'内存用量6、memory.failcnt:报告内存'达到'在 memory.limit_in_bytes设定的'限制值'的次数7、memory.stat:包含'大量'的内存统计数据8、cache:'页缓存',包括 tmpfs(shmem),单位为字节9、rss:'匿名和 swap 缓存',不包括 tmpfs(shmem),单位为字节9、mapped_file:memory-mapped 映射的文件大小,包括 tmpfs(shmem),单位为字节10、pgpgin:'存入'内存中的页数
11、pgpgout:从内存中'读出'的页数12、swap:swap 用量,单位为字节
kubelet --cgroup-driver=systemd
④ 在容器中使用cgroup
容器本质:操作系统上的一个'进程process',关于进程有'哪些'管理nerdctl run -h '截取部分输出'
docker 背后的内核 Cgroups 机制
需求:在 Containerd 的容器中来'使用 cgroup',并限制其使用内存为 '50M'
nerdctl inspect nginx | jq '.[0].Id' -r
说明:nginx 容器'进程 ID' 也会出现在上面的 'tasks' 文件中
说明:删除'容器'后,/sys/fs/cgroup/memory/default/ 目录下的'容器 ID'文件夹也会自动删除
namespace基础概念
容器背后的两个核心技术:Cgroups 和 Namespace
Docker背后的内核Cgroup机制 cgroup的两种驱动 cgroups systemd
linux 虚拟化 docker 之 cgroup linux cgroup学习总结mount