6.6.4交换空间的应用

1.  建立交换空间

作为交换空间的交换文件实际就是通常的文件,但文件的扇区必须是连续的,也即,文件中必须没有“洞”,另外,交换文件必须保存在本地硬盘上。

由于内核要利用交换空间进行快速的内存页面交换,因此,它不进行任何文件扇区的检查,而认为扇区是连续的。由于这一原因,交换文件不能包含洞。可用下面的命令建立无洞的交换文件:

 

$ dd if=/dev/zero of=/extra-swap bs=1024 count=2048

2048+0 records in

2048+0 records out

 

上面的命令建立了一个名称为 extra-swap,大小为 2048K 字节的交换文件。对 i386 系统而言,由于其页面尺寸为 4K,因此最好建立一个大小为 4K 倍数的交换文件;对 Alpha AXP 系统而言,最好建立大小为 8K 倍数的交换文件。

交换分区和其他分区也没有什么不同,可建立其他分区一样建立交换分区。但该分区不包含任何文件系统。分区类型对内核来讲并不重要,但最好设置为 Linux Swap 类型(即类型 82)。

建立交换文件或交换分区之后,需要在文件或分区的开头写入签名,写入的签名实际是由内核使用的一些管理信息。写入签名的命令为 mkswap,如下所示:

$ mkswap /extra-swp 2048

Setting up swapspace, size = 2088960 bytes

$

这时,新建立的交换空间尚未开始使用。使用 mkswap 命令时必须小心,因为该命令不会检查文件或分区内容,因此极有可能覆盖有用的信息,或破坏分区上的有效文件系统信息。

Linux 内存管理子系统将每个交换空间的大小限制在 127M (实际为 (4096.10)*8*4096 = 133890048 Byte = 127.6875Mb)。可以在系统中同时使用 16 交换空间,从而使交换空间总量达到 2GB

 

2.  使用交换空间

利用 swapon 命令可将经过初始化的交换空间投入使用。如下所示:

$ swapon /extra-swap

$

如果在 /etc/fstab 文件中列出交换空间,则可自动将交换空间投入使用:

/dev/hda5 none swap sw 0 0

/extra-swap none swap sw 0 0

实际上,启动脚本会运行 swapon a 命令,从而将所有出现在 /etc/fstab 文件中的交换空间投入使用。

利用 free 命令,可查看交换空间的使用。如下所示:

$ free

total used free shared buffers

Mem: 15152 14896 256 12404 2528

-/+ buffers: 12368 2784

Swap: 32452 6684 25768

$

该命令输出的第一行(Mem: ) 显示了系统中物理内存的使用情况。total 列显示的是系统中的物理内存总量;used 列显示正在使用的内存数量;free 列显示空闲的内存量;shared 列显示由多个进程共享的内存量,该内存量越多越好;buffers 显示了当前的缓冲区高速缓存的大小。

输出的最后一行 (Swap: ) 显示了有关交换空间的类似信息。如果该行的内容均为 0,表明当前没有活动的交换空间。

利用top 命令或查看 /proc 文件系统中的 /proc/meminfo 文件可获得相同的信息。

利用 swapoff 命令可移去使用中的交换空间。但该命令应只用于临时交换空间,否则有可能造成系统崩溃。

swapoff a 命令按照 /etc/fstab 文件中的内容移去所有的交换空间,但任何手工投入使用的交换空间保留不变。

 

3. 分配交换空间

大多数人认为,交换空间的总量应该是系统物理内存量的两倍,实际上这一规则是不正确的,正确的交换空间大小应按如下规则确定:

·      估计需要的内存总量。运行想同时运行的所有程序,并利用 free ps 程序估计所需的内存总量,只需大概估计。

·      增加一些安全性余量。

·      减去已有的物理内存数量,然后将所得数据取整为 MB,这就是应当的交换空间大小。

·      如果得到的交换空间大小远远大于物理内存量,则说明需要增加物理内存数量,否则系统性能会因为过分的页面交换而下降。

当计算的结果说明不需要任何交换空间时,也有必要使用交换空间。Linux 从性能的角度出发,会在磁盘空闲时将某些页面交换到交换空间中,以便减少必要时的交换时间。另外,如果在不同的磁盘上建立多个交换空间,有可能提高页面交换的速度,这是因为某些硬盘驱动器可同时在不同的磁盘上进行读写操作。