vm.overcommit_memory=2的测试

简介:

场景说明

    调试了分配内存的策略,看看是否会出现如果没有使用到的内存,系统就不会出现任何的异常,从中查看是否会有任何的缺陷。在实际的过程中,我们可以看到由于允许系统分配内存的过程中,过载的分配内存,导致出现无法执行其他的指令过程。测试代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include<unistd.h> 
int  main() 
         char * p=NULL; 
         while (1) 
        
                 p= malloc ( sizeof ( int )*1000); 
                 if (NULL==p) 
                
                         break
                
                 /*
                 下面的这一句话,保证了申请到的内存都是有效的,可被使用的,在内存分配原则中,就存在一种情况是,如果分配的内存不被使用,可以预先分配并不存在的内存,等待内存被释放,
                 */
                 memset (p,0x00,100); 
                 
                 usleep(10); 
        
         while (1) 
        
                 sleep(1); 
        
         return  0; 
}

执行当前的代码之后,系统出现了异常:

~bash:fork can not allocate memory

可以说是让整个系统处于崩溃的边缘。无法执行任何的指令,从中我们了解到了这种内存分配策略的一些弊端。




     本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1609334,如需转载请自行联系原作者





相关文章
|
4月前
|
安全 数据处理 C#
深入理解C#中的Span<T>和Memory<T>
【1月更文挑战第8天】本文旨在探讨C#中引入的两个重要类型:Span<T>和Memory<T>。它们为开发者提供了一种高效且安全的方式来处理内存中的数据。文章首先介绍这两个类型的基本概念和用途,接着深入分析它们的工作原理和适用场景,并通过代码示例展示如何在实际应用中使用它们。
|
缓存
关于renderInContext方法内存管理 memory warning
关于renderInContext方法内存管理 memory warning
402 0
|
弹性计算 PHP Docker
Contain Yourself! The VM Is Evolving
From traditional VMs to Docker containers, learn how the virtualization industry is evolving to meet constantly changing business needs.
2203 0
Contain Yourself! The VM Is Evolving