1: memory cgroup 的作用是什么?
限制cgroup 之中的进程所能使用的内存大小
memory cgroup 所暴露出的文件有哪些?
memory.limit_in_bytes #设置/显示当前限制的内存额度
memory.soft_limit_in_bytes #设置/显示当前限制的内存软额度
memory.usage_in_bytes #显示当前已用的内存
memory.failcnt #显示内存使用量达到限制值的次数
memory.use_hierarchy #设置/显示是否将子cgroup的内存使用情况统计到当前cgroup里面
memory.swappiness #设置和显示当前的swappiness
memory.oom_control #设置/显示oom controls相关的配置
memory.pressure_level #设置内存压力的通知事件,配合cgroup.event_control一起使用
memory.stat #显示当前cgroup的内存使用情况
cgroup.event_control #用于eventfd的接口
2: 如何限制memory cgroup 的内存大小?
memory.limit_in_bytes
memory.use_hierarchy
memory.swappiness
3: 设置oom的执行情况
memory.oom_control #设置/显示oom controls相关的配置
4: 如何查看当前使用的内存大小?
memory.usage_in_bytes #显示当前已用的内存
memory.use_hierarchy #设置/显示是否将子cgroup的内存使用情况统计到当前cgroup里面
5: 进程内存使用达到最大值的次数
memory.failcnt
6: 是否有监控指标表示内存回收的次数
暂时没有
7: 是否有参数来设置程序突破内存限制的执行程序?
memory.oom_control
默认值时0,使用oom killer 杀死程序
取值为1时,使程序暂停,当有足够的内存分配的时候,再执行。
7: 是否有相应的监控参数
8: docker 设置容器的最大的使用内存大小的相关参数设置?
实验
目的:验证memory cgroup 的作用
步骤:
1: 在 /sys/fs/cgroup/memory 目录下创建一个cgroup test
mkdir /sys/fs/cgroup/memory/test
2: 设置所能使用的内存上限
echo 10M > /sys/fs/cgroup/memory/test/memory.limit_in_bytes
3: 禁用 swapiness
echo 0 > /sys/fs/cgroup/memory/test/memory.swappiness
4:设置程序使用内存到达限制值 的处理方式
echo 0 > /sys/fs/cgroup/memory/test/memory.oom_control
5: 将当前的进程id 写入 /sys/fs/cgroup/memory/test/cgroup.procs 文件之中
echo $$ > /sys/fs/cgroup/memory/test/cgroup.procs
6: 编译程序 并 执行 执行一个每秒申请1M内存的程序
gcc ./mem-allocate.c -o ./mem-allocate
./mem-allocate
一个c语言程序,每秒申请1M内存
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#defineMB (1024 * 1024)
int main( int argc, char* argv[] ){
char*p;
inti =0;
while(1) {
p = (char *)malloc(MB);
memset(p, 0, MB);
printf("%dM memory allocated\n", ++i);
sleep(1);
}
return 0;
}
执行方式:
1: 编译成为可执行文件
gcc ./mem-allocate.c -o ./mem-allocate
2: 执行可执行的文件
./mem-allocate