今天在帮刘斌师兄解决那个问题的时候,就讨论到了交换分区到底可以做到多大,这直接影响到我们分配内存,可以分配多大的内存。
以前的时候,遵守一个规则:交换分区一般设为内存的1-2倍。
但是要处理大文件,单单1-2G是不行的,需要使用大的交换分区,但是交换分区可以做到多大呢?
我查了一下资料:
一、关于2G虚拟内存限制的说明
1. 早期的linux对虚拟内存的限制 linux2.2以前的内核,支持最大128M的Linux swap分区或文件。Linux swap的分区或文件总数不超过16个。所以在linux2.2以前,可用的最大虚拟内存为128M*8=1G。
2. Linux2.2.x对虚拟内存的限制 Linux2.2.x支持最大2G的Linux swap分区或文件。Linux swap的分区或文件总数不超过8个。所以在Linux2.2.x,可用的最大虚拟内存为 2G*8=16G
3. Linux2.4.x对虚拟内存的限制 Linux2.4.10之前支持最大2G的Linux swap分区或文件。Linux swap的分区或文件总数不超过8个。 所以在 Linux2.4.10之前,可用的最大虚拟内存为 2G*8=16G Linux2.4.10(含)之后支持最大2G的Linux swap分区或文件。Linux swap的分区或文件总数不超过32个。 所以在 Linux2.4.10之后,可用的最大虚拟内存为 2G*32=64G Linux2.4.x在内存管理策略上,就如Windows98向Windows2000转变一样,在内存和交换区中保存了更多的脏页,而不是及时回收内存,以此提高系统的效率。(见Widnows核心编程第18章的论述)。此外,如果你有超过1块磁盘,并且分别在不同的磁盘上建立了swap,那么linux会按照raid 0的方式来使用这些交换分区。
二、多少虚拟内存较好?
1. Linux 2.2.x(含)及以前 传统的2倍虚拟内存的观点是有效的。建议按照此方法进行分配。
2. Linux 2.4.x(含)及以后 在考虑合适的硬盘费用的情况下,对虚拟内存的需求是多多益善。 Linus明确的指出,即使是512M内存,也可以分配高达40G的交换区,以提高系统的性能。Zlatko 在向Linus提出性能的质疑后,自己进行了验证。Zlatko通过实验表明:大交换区策略没有增加磁盘I/O的费用。
三、实例 一台IBM x365服务器,配置4G内存。
1. 交换区最小不低于4G 建立两个各为2G的交换区,做为基础的4G交换分区
2. 建立8个2G的交换文件,做为扩展的交换分区 这样总的交换分区大概在20G左右,如果硬盘更大,可以增加最多。
题外话:关于Windows中的虚拟内存使用自Windows2000开始,微软也改变了内存使用策略。他们会尽可能较迟的回收内存。
因此,我个人相信大的交换区,对于Windows2000以上的系统也是更有效率的。
阅读(3737) | 评论(0) | 转发(0) |