您的位置:首页 > 运维架构 > Linux

Linux系统性能之内存(memory)

2015-07-15 13:10 441 查看
在安装Linux系统的时候,通常会选择这么个分区,这个交换分区(swap space)是用来干啥的呢?

交换分区就是使用硬盘的一部分作为内存RAM的扩展。内核会将当前不使用内存数据写到硬盘的这部分,腾出内存的这部分空间用以其他的使用。当需要使用这部分数据的时候,重新再读回到内存。读写硬盘比起使用真正的内存要慢地多,所以程序运行不是很快。

swap分区作为一个虚拟的内存,其存储方式和内存一致,采用页式存储的方式,在X86的机器上每一个页的大小为4KB。当内核将内存的数据写入时,其写入数据到页内。内核同时向swap设备和文件系统写内存数据。内存分页是内存交换的一个操作,内存分页就是同步内存数据到硬盘以正常的时间间隔。一段时间过后,应用程序必定会增长到消耗完内存,所以内核每隔一段时间需要扫描内存,进行内存分页,然后重新声明未使用的页面分配给其他的应用程序。这里使用的算法叫做PFRA(The Page Frame Reclaim Algorithm
)算法。其主要是用来释放内存的,此算法以页为单位选择内存中的那些页面需要被释放。有两种方式实现PFRA,其中一个是内核进程kswapd,另一个是“Low On Memory Reclaiming”函数。

kswapd进程,监控内核的两个参数pages_high和pages_low。如果空闲内存在pages_low以下,那么kswapd进程开始扫描并释放32个页面。这个过程会一直持续。直到空闲内存的在pages_high之上。

pdflush进程是用来同步任何和文件系统相关的页。也就是说当一个文件在内存中被修改的话,pdflush进程会将修改写回到硬盘。

然后我们来看vmstat的结果:

# vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b    swpd  free buff   cache     si so      bi bo        in cs   us sy id wa
0 0   104300 16800 95328 72200     0  0       5  26        7  14   4   1 95  0
0 0   104300 16800 95328 72200     0  0       0  24        1021 64 1   1 98  0
0 0   104300 16800 95328 72200     0  0       0  0         1009 59 1   1 98  0
swpd:当前交换分区的使用总量,单位是KB。因为空闲内存达到其阈值,数据写到swap设备中。

free: 当前可用的物理内存大小。

buff: 缓存区内存的大小。

cache:映射到进程地址空间的物理内存的大小。

so: 写入swap分区的数据大小。

si: 从swap分区写回RAM的数据大小。

bo: 写入文件系统或者swap设备的内存页面数。

bi: 从文件系统或者swap设备写回内存的页面数。

关于swap的总结:

1、减少系统主要页面错误,由于系统是利用内存缓存磁盘cache,故而能够获得更好地响应时间。

2、空闲内存数量很少是一个很不错的信号,缓存去被有效地利用,除了持久地写入swap设备和硬盘。

3、如果一个系统报告任何频繁的swap设备操作,这就意味着此系统内存不够用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: