4 Linux管理员手册--内存管理

本章说明Linux的内存管理特征,即虚拟内存和磁盘缓存 。描述系统管理员应该考虑的东西、工作和目的 。

什么是虚拟内存?

Linux支持虚拟内存, 就是使用磁盘作为RAM的扩展,使可用内存相应地有效扩大 。核心把当前不用的内存块存到硬盘,腾出内存给其他目的 。当原来的内容又要使用时,再读回内存 。这对用户全透明:运行于Linux的程序只看到大量的可用内存而不甘心哪部分在磁盘上 。当然,读写硬盘比真的内存慢(慢千倍),所以程序运行较慢 。用做虚拟内存的这部分硬盘叫 对换空间 。

Linux可以使用文件系统中的普通文件或单独的分区作为对换空间 。对换分区更快,但对换文件更易于改变大小(无须对硬盘重分区) 。如果知道要多少对换空间,应该用对换分区;如果不能确认,可以先用对换文件,用一段时间后再根据所需空间建立对换分区 。

Linux允许同时使用多个对换分区和/或对换文件 。即如果偶尔需要更多的对换空间,可以随时建立一个额外的对换文件 。

产生对换空间

对换文件是普通文件,对核心没有什么特别的 。唯一不同是它没有孔,用 mkswap 准备 。必须在本地盘上,不能在通过NFS mount的文件系统中 。

关于孔,是重要的 。对换文件保留了磁盘空间,使核心能快速对换出一页,而不必经过如文件的定位磁盘扇区的全部事情 。核心只用分配给这个文件的所有扇区 。由于文件中的孔意味着没有为文件中这个位置分配磁盘扇区,这对核心使用不利 。

产生没有孔的对换文件的一个好办法是通过如下命令:

$ dd if=/dev/zero of=/extra-swap bs=1024 count=1024
1024 0 records in
1024 0 records out
$
/extra-swap 是对换文件名,大小由count=给出. 大小最好是4的倍数,因为核心写出的内存页是4KB 。如果不是4的倍数,最后那几KB将不可用 。

对换分区也没什么特别 。就象产生其他分区一样产生;唯一的不同是它作为原始分区使用,即没有任何文件系统,最好将对换分区标记为类型82(Linux swap),虽然这对核心没有影响,但这使分区列表更清晰 。

产生对换文件或对换分区后,需要写个标记起用它,这包括核心要用的一些管理信息 。命令是 mkswap , 用法如下:

$ mkswap /extra-swap 1024
Setting up swapspace, size = 1044480 bytes
$

注意对换空间现在还没用,它存在,但核心还没用它提供虚拟内存 。

请一定小心使用mkswap , 因为它不检查文件或分区是否被其他东西使用 。你可能用mkswap 很容易地覆盖了重要文件和分区! 幸好,你只需在你安装系统时使用mkswap。

Linux内存管理限制了每个对换空间约为127MB(由于技术原因,实际限制是127.6875MB) 。可以同时使用最多16个对换空间,总计差不多2GB 。
使用对换空间

用swapon 将一个初始化的对换空间可用 。此命令告诉核心对换空间可以用了,对换空间的路径作为参数,启动一个临时对换文件可以用如下命令:

$ swapon /extra-swap
$


对换空间如果列入/etc/fstab,就可自动使用 。

/dev/hda8 none swap sw 0 0
/swapfile none swap sw 0 0

启动手稿运行命令swapon -a, 它将启动/etc/fstab 中所列的所有对换空间 。因此swapon 命令只有在启动额外的对换空间时才使用 。
可以用free 监视对换空间的使用,它将给出所有使用的对换空间 。

$ free
total used free shared buffers
Mem: 15152 14896 256 12404 2528
-/buffers: 12368 2784
Swap: 32452 6684 25768
$

前一行输出(Mem:)显示物理内存 。Total列不显示核心使用的物理内存(通常大约1MB) 。Used列显示被使用的内存总额(第二行不计缓冲) 。Free列显示全部没使用的内存 。Shared列显示多个进程共享的内存总额 。Buffers列显示磁盘缓存的当前大小 。

推荐阅读