进入内存目录:
root@ubuntu:/sys/fs/cgroup# cd memory/
root@ubuntu:/sys/fs/cgroup/memory#
设置内存上限:
root@ubuntu:/sys/fs/cgroup/memory/test# echo 400M > memory.limit_in_bytes
root@ubuntu:/sys/fs/cgroup/memory/test# echo 400M > memory.memsw.limit_in_bytes
用如下代码测验:
#include <stdio.h>
#include <stdlib.h>
#define MEGABYTE (1024*1024)
int main(int argc, char *argv[])
{
void *myblock = NULL;
int count = 0;
int i;
while (1)
{
myblock = (void *) malloc(MEGABYTE);
if (!myblock)
break;
for(i = 0;i < MEGABYTE / 4;i ++) /// 由于操作系统的某些机制,申请的内存只有在用到的时候才
{ /// 真正申请内存,所以这里需要写内存操作。
((unsigned int*)myblock)[i] = i;
}
count++;
printf("%d \n",count);
}
exit(0);
}
启动测试命令,当申请到最大内存的时候进程被killed,而不是通过malloc函数返回NULL的形式被终止:
root@ubuntu:~/TestDir/mem# cgexec -g memory:test ./a.out
1
2
3
4
5
6
7
8
9
10
11
12
/**********省略部分********/
395
396
397
398
Killed
root@ubuntu:~/TestDir/mem#