cgroup使用--memory资源限制

同样,cgroup也可以对memory资源进行限制。下面以一个例子来验证cgroup对内存限制的使用。

1.编写程序,循环分配600M内存。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define CHUNK_SIZE 1024 * 1024 * 100

int main()
{
    char *p;
    int i;

    for(i = 0; i < 6; i ++)
    {
        p = malloc(CHUNK_SIZE);
        if(p == NULL)
        {
            printf("malloc error!");
            return 0;
        }
        memset(p, 0, CHUNK_SIZE);
        printf("malloc memory %d MB\n", (i + 1) * 100);
        sleep(10);
    }
    while(1)
    {
        sleep(1);
    }
   return 0;
}

2.编译,运行程序

[root@localhost ~]# gcc mem.c  -o mem
[root@localhost ~]# ./mem 
malloc memory 100 MB
malloc memory 200 MB
malloc memory 300 MB
malloc memory 400 MB
malloc memory 500 MB
malloc memory 600 MB

[root@localhost ~]# top -p 2265
PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                  
2265 root      20   0  618640 614744    388 S   0.0 15.9   0:00.47 mem  

可以看出程序占用约600M内存。

3.添加cgroup限制

[root@localhost ~]# mkdir -p /sys/fs/cgroup/memory/memory-test
[root@localhost ~]#  cat /sys/fs/cgroup/memory/memory-test/memory.limit_in_bytes
9223372036854771712
# 设置最大内存大小为200M
[root@localhost ~]# echo 209715200 > /sys/fs/cgroup/memory/memory-test/memory.limit_in_bytes 
[root@localhost ~]# cat /sys/fs/cgroup/memory/memory-test/memory.limit_in_bytes 
209715200
#为了避免受swap空间的影响,设置swappiness为0来禁止当前cgroup使用swap
[root@localhost ~]# echo 0 > /sys/fs/cgroup/memory/memory-test/memory.swappiness

4.重新启动程序,并将程序加入cgroup

[root@localhost ~]# ./mem 

#另一个shell执行
[root@localhost ~]# echo `ps -ef | grep mem | grep -v grep | awk '{print $2}'` > /sys/fs/cgroup/memory/memory-test/tasks

过了一会可以看到程序被kill了。

[root@localhost ~]# ./mem 
malloc memory 100 MB
malloc memory 200 MB
Killed

通过设置memory.oom_disable的值来设置内存超出设定值时是操作系统kill进程还是休眠进程。

# mem内存超过200M时进程会休眠
echo 1 > /sys/fs/cgroup/memory/memory-test/memory.oom_control
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值