解决Linux系统swap分区太小问题
为了突破物理内存的限制,在操作系统中实现了"虚拟内存"技术。它使得应用程序可以操纵大于实际物理内存的空间。而且虚拟内存可以用来隔离每个进程,成为进程的安全保护网,使得每个进程都不受其他程序的干扰。如果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空间容量。
措施二:创建swap文件调整swap容量。
当系统中的硬盘空间已经全部分配给其它分区,此时就不适合采用fdisk命令来增加swap分区的容量。因为这个命令会删除目标空间的文件。遇到这种情况时,系统管理员需要采用创建swap文件的方式来增加虚拟的swap空间。简单的说,就是在硬盘中创建一个虚拟的swap文件。通过这个文件让其在系统硬盘中划分出一个空间,供swap空间使用。
第一步:创建swap 文件。
系统管理员可以利用"dd bs= count="这个命令来创建swap文件。这个命令中主要采用了bs与count两个参数。其中bs参数制定每次读取及输入多少个字节。因为硬盘存取的最小单位为扇区,所以设置bs参数就相当于设置每个扇区的大小。通常情况下这个参数设置为32为好。参数count则主要是用来设置可以使用扇区的数量。所以这个文件所占用的空间就是以上连个参数的乘积。这里需要注意的是,如果要增加swap文件容量,往往是通过调整count参数来实现的。也就是说,bs参数一般就是32,不需要去动它。
第二步格式化并启动swap 文件。
跟上面的方法一样,建立好文件之后还需要格式化这个文件并启用它。这主要是因为到现在为止,这个文件用的还是硬盘中原来的文件系统格式,如为ext3等等。这个文件系统格式是不能够用来做swap分区的扩展的。为此系统管理员需要先通过mkswap工具把这个文件格式化为swap文件格式。然后再使用swapon命令启用这个文件。这个特性有点像微软操作系统中的动态磁盘的概念。
虽然这两种方式都可以解决swap分区过小的问题,但是这跟在安装操作系统的时候划分swap分区还是有一定的区别。如通过以上两种方式建立的swap分区,不会随着系统的重新启动而自动启动。而系统安装时设置的swap分区则会在开机时自动启动。如果每次开机后都要手工执行swapon命令来启动swap分区或者文件的话,那么这也太麻烦了。为了解决这个问题,就需要修改Linux系统的启动配置文件。如系统管理员可以在启动配置文件中加入一行内容,让Linux系统开机时自动启动swap分区以及文件。除了这个自动启动以外,在性能上也有一定的差异。特别是通过swap文件来创建虚拟的swap空间,其执行性能要比真实的swap空间性能要差一点。不过其好处是不会对现有分区中的文件造成影响。
所以虽然Linux官方检疫Swap空间的容量最好为内存的1-2倍。但是在实际工作中有些应用程序则对此提出了特殊的要求。为此在Linux系统安装完毕之后,系统工程师有时还不得不对swap容量进行调整。以上两种方式是比较简单使用的调整方式,系统管理员可以尝试着使用。
关键词标签:Linux系统swap分区