Linux 内存深究

Linux的内存使用以及优化是一个很有意思很深度的问题,在此写一篇文章来回顾和记录。

内存活动基本上可以用3个数字来量化,活动虚拟内存总量,交换(swapping)率和调页(paging)率。其中第一个数字表明内存的总需求量,后两个数字表示那些内存中有多少比例正处在使用之中.目标是减少内存活动或增加内存量,直到调页率保持在一个可以接受的水平上为止。

活动虚拟内存的总量(VM)=实际内存大小(size of real memory)(物理内存)+使用的交换空间大小(amount of swap space used),当程序运行需要的内存大于物理内存时,UNIX系统采用了调页机制,即系统copy一些内存中的页面到磁盘上,腾出来空间供进程使用,在日常的Linux系统中,偶尔的调页,系统是可以忍受的,但是如果频繁的调页,则表明物理和虚拟内存不够用,需要调出空间供其他的程序来使用,此时,应该考虑增加物理内存。

在Unix(Linux)中内存的管理,主要使用以下两种方法:调页算法,交换技术

调页算法是将内存中最近不常使用的页面换到磁盘上,把常使用的页面(活动页面)保留在内存中供进程使用。交换技术是系统将整个进程,而不是部分页面,全部换到磁盘上。正常情况下,系统会发生一些交换过程。当内存严重不足时,系统会频繁使用调页和交换,这增加了磁盘I/O的负载。进一步降低了系统对作业的执行速度,即系统I/O资源问题又会影响到内存资源的分配。

Unix(Linux)的虚拟内存:

Unix的虚拟内存是一个十分复杂的子系统,它实现了进程间代码与数据共享机制的透明性,并能够分配比系统现有物理内存更多的内存,某些操作系统的虚存甚至能通过提供缓存功能影响到文件系统的性能,各种风格的UNIX的虚存的实现方式区别很大,但都离不开下面的4个概念。

1:实际内存
实际内存是指一个系统中实际存在的物理内存,称为RAM。实际内存是存储临时数据最快最有效的方式,因此必须尽可能地分配给应用程序,现在的RAM的形式有多种:SIMM、DIMM、Rambus、DDR等,很多RAM都可以使用纠错机制(ECC)。

2:交换空间
交换空间是专门用于临时存储内存的一块磁盘空间,通常在页面调度和交换进程数据时使用,通常推荐交换空间的大小应该是物理内存的二到四倍。

3:页面调度
页面调度是指从磁盘向内存传输数据,以及相反的过程,这个过程之所以被称为页面调度,是因为Unix内存被平均划分成大小相等的页面;通常页面大小为4KB和8KB(在Solaris中可以用pagesize命令查看)。当可执行程序开始运行时,它的映象会一页一页地从磁盘中换入,与此类似,当某些内存在一段时间内空闲,就可以把它们换出到交换空间中,这样就可以把空闲的RAM交给其他需要它的程序使用。

4:交换
页面调度通常容易和交换的概念混淆,页面调度是指把一个进程所占内存的空闲部分传输到磁盘上,而交换是指当系统中实际的内存已不够满足新的分配需求时,把整个进程传输到磁盘上,交换活动通常意味着内存不足。

查看内存的使用,通常使用vmstat和free 下面我们来分析一下系统的案例:


其中Swpd:表明占用了交换分区也就是swap分区,此时如果si,so的值为0,表明只是在交换分区中缓存了一部分文件,而并没有存在大量的页面调度和交换,此时不要担心OS的内存使用,

以上 free 指的是空闲的物理内存,

buff:作为buffer cache的内存,对块设备的读写进行缓冲

cache:作为page cache的内存,文件系统的cache

当看到cache很大的时候,其实我们不需要担心,因为这是Linux的另外一个特性,大量占用内存进行缓存,减少磁盘的IO,同时能够较小CPU I/O的等待,而此时的cache 是可以被OS从新分配使用的。

SWAP
-si:交换内存使用,由磁盘调入内存
-so:交换内存使用,由内存调入磁盘
内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。

我发现有些朋友看到空闲内存(FREE)很少的或接近于0时,就认为内存不够用了,实际上不能光看这一点,Linux是抢占内存式的OS,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响。

参考资料:

写本文的时候,抄袭了一下两篇文章:感谢你们的贡献让我理解更多,谢谢。

http://kerrigan.sinaapp.com/post-7.html

http://bbs.linuxtone.org/thread-6473-1-1.html

符:vmstat虚拟内存统计信息说明

字段 描述
Swapd 当前正在使用的虚拟内存大小(KB),虚拟内存到达很低的阀值时,更多的数据被换页到swap设备。
Free 当前应用程序可用的物理内存(KB)
Buff 物理内存缓存用作read()或write()操作的大小(KB)
Cache 物理内存映射到进程地址空间的大小(KB)
So 数据从RAM写到swap磁盘的大小(KB)
Si 数据从swap磁盘写回RAM的大小(KB)
Bo 磁盘块从RAM换出到文件系统或swap设备的数目。
Bi 磁盘块从文件系统或swap设备换入RAM的数目。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值