原文:All about Linux swap space

Linux将物理RAM内存分割成不同的内存块,我们把这个块叫做页page。而交换swapping这个动作发生在将一页内存拷贝到提前配置好的硬盘区域,这块区域就叫交换区swap space,以此来释放内存页的占用。物理内存+交换区=可用虚拟内存大小。

优点

swapping交换有两个存在的必要:

  1. 当系统需要比可用物理内存更大的空间时,内核换出一些用完的页,以此给当前这个应用分配更多的内存。
  2. 有的程序初始化的时候回用到大量的页,但是后来这些空间都不再使用了。内核会把这些页换出,以此为其他需要的程序(或者是硬盘缓存disk cache)提供内存。

缺点

但是,交换区也会有出问题的时候。与内存相比,磁盘读写是比较慢的。一般内存速度以纳秒计,而磁盘需要到毫秒,所以访问磁盘会很慢。当交换越多,系统也就越慢(因为在读写磁盘)。

当一个交换变慢,交换动作变多,会进入恶性循环,越交换系统越慢可用内存越少越需要交换。这种时候系统忙于寻找可用内存以此来保证应用运行。这种情况下,只能增加RAM配置。加机器加配置大法好!

Linux中有两种交换区:

  1. 交换分区 硬盘中一个单独的区域,仅供交换使用,其他文件无法访问
  2. 交换文件 一种特殊的系统、应用文件

使用swapon -s可查看当前的交换区状况:

1
2
Filename  Type       Size       Used Priority
/dev/sda5 partition  859436  0       -1

可通过fdisk管理交换分区。

  1. 先确保分区已标记为交换分区
  2. 然后创建文件区

多大合适?

如果RAM够大,理论上可以不需要交换区。但是内存用尽的时候系统会崩溃。

老版本的Unix系统需要物理内存的2-3倍配置。现代系统实现不需要那么多。大致原则如下:

  1. 桌面系统,配置两倍于物理内存的大小,这种情况允许我们启动一些大应用(空闲的时候内存可以被换出),这样对使用中的应用的RAM使用更有效。
  2. 服务端,配置一半于物理内存的大小,这样当需要更多内存的时候可以更灵活换出。但是同时也需要进行监控,必要时升级RAM。

结论

管理好交换区是系统管理很重要的一点。好的规划与正确使用,可以有更好的效果。当然配置不是固定的,要敢于测试使用,动态调整自己的配置策略。