当内存不足时会发生什么,结果很简单,linux的内存用完了,无法申请缓冲区,内核会挑选进程将其杀死,一般情况下,杀死正在申请内存的程序。频繁的进行磁盘swap操作,经常会出现这类问题,或是并发处理时启动的进程数过多。
出现内存耗尽的原因很简单,你申请的内存大小,超过了可用的虚拟内存的大小,注意是虚拟内存(内存并不是唯一的,交换分区也可以提供内存)
探究oom(out of memory)
首先运行下面的程序,不断申请大量内存:
#include <stdio.h>
#include <stdlib.h>
#define MEGABYTE 1024*1024
int main(int argc, char *argv[])
{
void *myblock = NULL;
int count = 0;
while (1)
{
myblock = (void *) malloc(MEGABYTE);
if (!myblock) break;
printf("Currently allocating %d MB\n", ++count);
}
exit(0);
}
上面的程序运行一会就会出现oom,现在运行另外一个程序,不断申请内存,并且将其填充1。
#include <stdio.h>
#include <stdlib.h>
#define MEGABYTE 1024*1024
int main(int argc, char *argv[])
{
void *myblock = NULL;
int count = 0;
while(1)
{
myblock = (void *) malloc(MEGABYTE);
if (!myblock) break;