作者回复: k8s request不修改Memory Cgroup里的参数。只是在kube scheduler里调度的时候看做个计算,看节点上是否还有内存给这个新的container。
作者回复: @谢哈好, > 但memalloc进程会被暂停申请内存,状态会变成因等待资源申请而变成task interruptable 挺好的,能分析最后进程的状态。
作者回复: >这边提到的cgroup底下的memory.usage_in_bytes是不是可以理解为通过top看到的usage与buffer/cached内存之和 是的 > 同时这边衍生出一个问题假如oom的评判标准是包含buffer/cached的内存使用 OOM是不包含buf/cache的。总的memory usage如果超过memory limit, 那么应该是先发生memory reclaim去释放cache。
作者回复: 嗯,可以这么理解
作者回复: @wuqilv, 你可以用free看一下,是不是swap打开了?
作者回复: @垂死挣扎的咸鱼 > (1) 新申请的内存还是指物理内存。虚拟内存是不会引起OOM的。 > 想请问一下是否anon-rss + file-rss 就等于新申请的内存+ memory.usage_in_bytes - reclaim memory 其实这里最大的一点就是内核的内存是否被计入到cgroup memory中。缺省情况内核使用的内存会被计入到cgroup里, 不过对于大部分运行应用程序的容器里, anon-rss + file-rss就是最主要的物理内存开销(这里不包含内核内存)。 但是如果一个容器中的进程对应的内核内存使用量很大那么我觉得更加准确的就是看 “新申请的内存+ memory.usage_in_bytes - reclaim memory” 了。
作者回复: 是第一种情况: > 是指 group2 + group3 + group1 的所有进程使用的内存总值就不能超过 200MB?
作者回复: 在memory cgroup中可以通过memory.oom_control来禁止对应cgroup中的oom killer。 禁止oom killer不会导致内存管理失控,它也不是内存的回收机制。
作者回复: limit 对应 Memory Cgroup中的memory.limit_in_bytes k8s request不修改Memory Cgroup里的参数。只是在kube scheduler里调度的时候看做个计算,看节点上是否还有内存给这个新的container。
作者回复: @Acter,好问题,下一课,我会讲这个问题