4 Linux管理员手册--内存管理( 二 )


后一行(Swap:)对对换空间,显示的信息类似上面 。如果这行为全0,那么没使用对换空间 。

通过top,或使用proc文件系统的/proc/meminfo 文件可以得到相同的信息 。得到某个对换空间的使用信息目前还比较困难 。

可用swapoff 取消对换空间,一般不必这样,除非是临时对换空间 。对换空间中的要用的页被换入(swap->RAM),如果没有足够的物理内存,就被换出(RAM->swap,到其他对换空间) 。如果没有足够的虚拟内存放进所有页面,Linux将开始震荡(thrash); 很长时间以后应该能恢复,但此时系统不可用 。取消一个对换空间前,应该检查(例如用free )是否有足够的物理内存 。

用swapon -a自动使用的所有对换空间可以用swapoff -a取消 。它查看文件/etc/fstab 得知要取消什么 。任何手工起用的对换空间将依然使用着 。

即使有许多空闲的物理内存,有时许多对换空间也被使用着 。这种情况是由于在某个时间需要对换,但后来一个占用大量物理内存的大进程终止并释放了内存 。直到被换出的数据要被使用之前它们并不自动换入 。不必顾虑这种情况,但知道为什么会发生这种情况会更安心 。

与其他操作系统共享对换空间

许多操作系统内置虚拟内存 。由于他们只需在运行时使用,即,不会同时,那么除了当前运行的,其他所有对换空间都浪费着 。如果他们共享同一个对换空间将更有效 。这是可能的但需要一些Hacking工作 。Tips-HOWTO包含了一些如何完成这项任务的忠告 。

分配对换空间

也许有人告诉你,应该分配2倍于物理内存的对换空间,但这是个虚假的规律 。下面说明如何正确:

估计你的全部内存需求 。这是你可能需要的最大量,即你要同时运行的所有程序所需的内存要求的总和 。你可以同时运行你可能同时运行的所有程序试试 。

例如,如果你想运行X,你得分配8MB给他,gcc要求数MB(有些文件偶尔可能需要很大量,数十MB,但一般4MB差不多),等等 。核心自己使用1MB,Shell和一些小工具可能需要几百KB(或说,总共1MB) 。不必太精确,粗略估计就行,但可以较悲观地考虑 。

记得如果将有多人同时使用系统,他们将都消耗内存 。如果2个人同时运行相同的程序,总内存消耗一般并非加倍,因为代码页和共享库是单一的 。

free 和ps 命令对估计内存需求很有用 。

第一步的估计加上一些安全量 。因为对程序大小的估计很可能是错误的,因为你可能忘了一些要运行的程序,并确定你有一些额外空间 。应该有数MB 。(分配太多对换空间比分配太少好,但不必过分,因为不使用的对换空间是浪费;见后文:关于增加对换空间 。) Also,since it is nicer to deal with even numbers, you can round the value up to the next full megabyte.

基于以上计算,你知道了你总共需要多少内存 。减去你的实际物理内存,就是对换空间 。(有些版本的UNIX中,你还需要分配物理内存的映象空间,所以第二布中计算的你所需的空间就不能减)

如果你计算的对换空间比你的实际物理内存大得多(大于好几倍以上),那么你也许需要更多的物理内存,否则系统性能将太低 。

即使计算显示你无须对换空间,最好还是至少有一些 。Linux有些侵略性地使用对换空间,这样保持一定的空闲物理内存 。即使内存还不为什么程序所需,Linux也会换出一些不用的内存页,这样在需要的时候就可以避免因对换的等待--即对换可以在硬盘空闲的时候提早完成 。

对换空间可以分在几个硬盘中,这有时可以提高性能,依赖于这些盘的相对速度和存取模式 。你可以尝试几中方案,但要知道正确地尝试是很困难的 。不要相信某种方案比其他方案好的断定,因为它不会总是对的 。

推荐阅读