为了突破物理内存的限制,在操作系统中实现了“虚拟内存”技术。它使得应用程序可以操纵大于实际物理内存的空间。而且虚拟内存可以用来隔离每个进程,成为进程的安全保护网,使得每个进程都不受其他程序的干扰。如果swap空间不够会产生什么负面作用呢?简单的来说,如果系统的物理内存用光了,系统就反映速度会变得很慢,但是操作系统仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程或线程,如果Swap空间用完,则服务进程无法启动,就会出现swap空间不足的错误,严重时会造成服务进程的死锁。可见Swap空间的分配是很重要的。如果swap空间太小会造成应用程序错误,而不光光是性能下降的问题。
在Linux系统下,这个虚拟内存就被叫做swap。在安装操作系统的时候,安装向导会提示用户需要创建多少的swap空间。通常情况下,swap比较合适的大小为物理内存的1-2倍。但是有些应用程序的话,对于swap分区比较饥渴,如JAVA或者Oracle应用程序,他们要求swap分区的大小能够达到物理内存的2倍以上。此时原先在安装系统的时候为其分配的swap分区就太小了。那么该如何补救呢?
笔者以前就遇到过类似的问题。有一台Linux服务器,上面已经部署了文件服务器。后来出于部署ERP系统的需要,要在这台服务器上部署一个Oracle数据库系统。不过Oracle数据库系统对swap的空间有要求。如果不满足这个要求的话,Oracle操作系统无法安装。而笔者不能够通过重装Linux服务器的方式来扩展swap空间,因为上面还运行着文件服务器。为此笔者只好通过其他途径来实现这个需求了。针对这种情况,Linux系统提出了两种补救措施,分别为创建新的swap空间和创建swap 文件。笔者是通过创建swap文件的方式来调整swap空间的。如上图所示,笔者就在home目录下创建了一个swap文件,并且通过启动配置文件让其随着系统的启动而自动启用。如此配置之后,Oracle数据库系统就可以顺利安装了。
这两种调整方式的具体的实现方式如下所示。
措施一:创建新的swap空间,增加swap容量。
如果在Linux服务器的硬盘中还有比较多的空余容量,或者系统管理员添置了新硬盘,此时就可以利用Linux系统自带的fdisk硬盘格式化工具,来创建新的swap分区。具体的操作如下:
第一步:创建新的分区。如笔者在服务器硬盘中还有一个20G的分区没有使用过,就可以利用fdisk磁盘格式化工具,来创建新的分区。具体fdisk命令的使用方法大家可以参考其它的相关资料,笔者在这里就不过多展开了。在使用这个工具的时候,如果要把分区设置为swap分区,则需要注意要把空间设置为扩展分区。然后再在扩展分区上设置一个逻辑分区。如此的话,为后续维护与管理提供了方便。如管理员可以陆续增加swap空间等等。
第二步:将分区的文件系统设置为swap文件系统。
默认情况下系统新增加的分区其文件格式为ext3。为了让这个分区成为swap分区,则需要把这个分区的文件格式改为swap文件系统。这个任务也是在fdisk命令中完成。如果要把这个分区格式改为swap,则在fdisk命令执行时,当提示hex code时,系统管理员需要输入swap文件系统的代号。通常情况下swap文件系统的代号为82。然欧再继续后续的工作。如果不修改的话,则系统默认会采用ext3文件系统格式。
第三步:格式化并启动swap分区格式。当fdisk命令执行完毕后,还必须重新启动计算机,刚才的设置才会生效。但是,fdisk命令只是划分出了一个swap分区,系统还是无法使用这个分区,因为这个分区还没有格式化与启动。与微软操作系统一样,当划分出一个分区之后,系统管理员还需要格式化这个分区。为此,系统管理员需要通过mkswap命令来对刚才划分的swap分区进行格式化。不过与微软操作系统不同的是,对分区格式化之后,这个新的分区默认情况下是没有启动的,第一次需要通过系统管理员手工启动它。此时系统管理员需要采用的命令是swapon,来启动swap分区。
通过以上简单的三个步骤,就可以在硬盘为用的空间中或者新添加的硬盘中增加一个swap分区,以实现扩大swap分区容量的目的。不过这里需要注意一点,在使用fdisk工具的时候,会把目标空间中的内容都删除。为此只有当目标空间中没有存储文件或者存储的文件不再需要时才使用这种方法。如果现在系统中没有未使用的空间;但是已有的分区中则有多余的空间,则就需要采用另外一种方法,即通过增加swap文件的方式来调整swap空间容量。