Linux不使用swap分区内存,《swap分区与内存耗尽》

本文详细介绍了Linux系统中swap分区的作用,以及如何通过实验验证即使增加swap空间也无法突破32位系统4GB内存限制。当系统内存耗尽时,内核会采取一系列措施,如清理缓存、交换页面到磁盘,直至触发OOM Killer。通过调整overcommit、ulimit和setrlimit等方法,可以避免进程过度占用内存导致系统崩溃。
摘要由CSDN通过智能技术生成

一)swap的概述

1)swap的作用可简单描述为:

当内存不够用时,将存储器中的数据块从DRAM移到swap的磁盘空间中,以释放更多的空间给当前进程使用.

当再次需要那些数据时,就可以将swap磁盘中的数据重新移到内存,而将那些不用的数据块从内存移到swap中.

2)数据从内存移动交换区的行为被称为页面调用,发生在后台的页面调用没有来自应用程序的干涉.

3)swap空间是分页的,每一页的大小和内存页的大小一样.

4)并不是一定要给每个系统划分SWAP,比如大多数的嵌入式就没有swap.

二)swap能让系统最多使用多少内存?

一个32位的LINUX系统在没有启用PAE的情况下最多可以用4GB的物理内存.在用户空间中最多可用3GB.

而增加swap会让系统增加可使用的内存空间吗?

用下面的测试回答这个问题:

查看内核版本

[root@test1 tmp]# uname -r

2.6.18-8.el5

建一个10GB的文件

[root@test1 tmp]# dd if=/dev/zero f=data.dat bs=10M count=1000

[root@test1 tmp]# mkswap data.dat

Setting up swapspace version 1, size = 10485755 kB

[root@test1 tmp]# free -m

total       used       free     shared    buffers     cached

Mem:           503         43        460          0         13          9

-/+ buffers/cache:         20        482

Swap:         1027         22       1005

[root@test1 tmp]# swapon data.dat

[root@test1 tmp]# free -m

total       used       free     shared    buffers     cached

Mem:           503         46        457          0         15          9

-/+ buffers/cache:         20        482

Swap:        11027         22      11005

[root@test1 tmp]# swapon -s

Filename                                Type            Size    Used    Priority

/dev/sda2                               partition       1052248 23040   -1

/tmp/data.dat                           file            10239992        0       -3

现在的物理内存和swap加起来超过了4GB.而我们最多能用多少呢?

下面的程序会不断申请/分配内存空间.

源程序如下:test1

#include #include #include

int main (int argc, char *argv[])

{

void *ptr;

int n = 0;

while (1){

ptr = malloc(0x100000);

if (ptr == NULL)

break;

memset(ptr, 1, 0x100000);

printf("malloced %d MB\n", ++n);

}

pause();

}

[root@test1 tmp]# gcc test1.c -o callmem

[root@test1 tmp]# ./callmem

malloced 3039 MB

malloced 3040 MB

malloced 3041 MB

malloced 3042 MB

malloced 3043 MB

malloced 3044 MB

malloced 3045 MB

malloced 3046 MB

malloced 3047 MB

malloced 3048 MB

malloced 3049 MB

malloced 3050 MB

malloced 3051 MB

malloced 3052 MB

malloced 3053 MB

malloced 3054 MB

malloced 3055 MB

malloced 3056 MB

在分配了3056MB的内存之后,再不能分配了,说明即使通过swap给系统增加了10GB的内存,系统最终也只能使用3056MB的内存空间(用户空间),不能突破4GB的限制.

三)超过了系统最大可使用内存空间会怎样?

依旧是上面的例子,我们关闭掉swap文件data.dat

[root@test1 tmp]# swapoff data.dat

查看当前的swap空间

[root@test1 tmp]# swapon -s

Filename                                Type            Size    Used    Priority

/dev/sda2                               partition       1052248 22760   -1

执行callmem

[root@test1 tmp]# ./callmem

malloced 1465 MB

malloced 1466 MB

malloced 1467 MB

malloced 1468 MB

malloced 1469 MB

malloced 1470 MB

malloced 1471 MB

malloced 1472 MB

malloced 1473 MB

malloced 1474 MB

malloced 1475 MB

malloced 1476 MB

malloced 1477 MB

malloced 1478 MB

malloced 1479 MB

malloced 1480 MB

malloced 1481 MB

malloced 1482 MB

malloced 1483 MB

malloced 1484 MB

malloced 1485 MB

Killed

在分配了1485MB内存后,程序

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值