memory cgroup

587 阅读2分钟

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