可以 [有效地] 从内核 >= 2.5.30 关闭过度使用。
以下Linux 内核内存:
// 在此处保存您的工作并记下您当前的 overcommit_ratio 值
# echo 2 > overcommit_memory
# echo 1 > overcommit_ratio
这将 设置VM_OVERCOMMIT_MEMORY
为 2 表示不过度提交超过 overcommit_ratio,设置为 1(即没有过度提交)
空 malloc 演示
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
void *page = 0; int index;
void *pages[256];
index = 0;
while(1)
{
page = malloc(1073741824); //1GB
if(!page)break;
pages[index] = page;
++index;
if(index >= 256)break;
}
if(index >= 256)
{
printf("allocated 256 pages\n");
}
else
{
printf("memory failed at %d\n",index);
}
while(index > 0)
{
--index;
free(pages[index]);
}
return 0;
}
输出
$ cat /proc/sys/vm/overcommit_memory
0
$ cat /proc/sys/vm/overcommit_ratio
50
$ ./code/stackoverflow/test-memory
allocated 256 pages
$ su
# echo 2 > /proc/sys/vm/overcommit_memory
# echo 1 > /proc/sys/vm/overcommit_ratio
# exit
exit
$ cat /proc/sys/vm/overcommit_memory
2
$ cat /proc/sys/vm/overcommit_ratio
1
$ ./code/stackoverflow/test-memory
memory failed at 0
请记住将您的 overcommit_memory 恢复为 0 和 overcommit_ratio 如所述