Linux 物理内存不足时, 临时增加swap分区

in linux with 0 comment

系统中交换分区的大小并不取决于物理内存的量,而是取决于系统中内存的负荷,所以在安装系统时要根据具体的业务来设置SWAP的值。其实虚拟内存并不是等到物理内存用尽了才使用的,是否尽量的使用或不使用swap,在内核空间有一个参数控制。

# cat /proc/sys/vm/swappiness
60

表示默认的swappiness的值为60。换而言之,当swap空间使用达到60%的时候,开始释放物理内存中的cache/buffers。 swappiness=0 的时候表示最大限度使用物理内存,然后才是swap空间;swappiness=100 的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

我们可以把这个参数值设置的低一些,让操作系统尽可能的使用物理内存,降低系统对swap的使用,从而提高系统的性能。例如

# echo 10 > /proc/sys/vm/swappiness

或者:


# sysctl vm.swappiness=10
vm.swappiness = 10
# cat /proc/sys/vm/swappiness
10

这表明修改已经生效。但是如果我们重启了系统,它又会变成60。为了让我们的修改长久有效,可以修改配置文件/etc/sysctl.conf:

# echo 'vm.swappiness=10' >>/etc/sysctl.conf
# sysctl -p   #重新载入配置文件。

首先,需要制作交换分区文件。现有交换分区大小是0M。此处设置交换分区文件的大小为1G。执行下述命令:

# dd if=/dev/zero of=/var/tmp/swap bs=1k count=1024000
记录了1024000+0 的读入
记录了1024000+0 的写出
1048576000字节(1.0 GB)已复制,5.07655 秒,207 MB/秒

它将在/var/tmp路径创建一个名为swap、大小为1G的分区文件,该分区文件拥有1024000个扇区(block),每个扇区大小为1K。接着,再把这个分区文件格式化为交换分区格式:

# mkswap /var/tmp/swap

挂载到文件系统:

# swapon /var/tmp/swap

如果想要确认交换分区是否挂载成功,可执行:

# swapon -s 
Filename      Type      Size    Used  Priority
/dev/sda1     partition 511996  16192 ?1
/var/tmp/swap file      1023996 0     ?2

从显示结果来看,我们确实看到了文件格式交换分区被加载。如果还想要查看系统内存情况,只需执行:

# free -m
       total       used free shared buffers cached
Mem:   995         935  60   0      6       551
-/+ buffers/cache: 376  618
Swap:  1499        15   1484

如果我们不再需要这一块交换分区文件,那么可以先卸载再删除它:

# swapoff /var/tmp/swap
# rm -rf /var/tmp/swap

如果保留交换分区文件,待将来再次使用,我们需要先挂载它,因为一旦重启,原先的挂载便会失效!若要让我们的交换分区文件随机器启动自动挂载,则可修改/etc/fstab文件,如下设置:

# cat /etc/fstab | grep -i swap
/dev/sda1     none swap sw       0 0
/var/tmp/swap swap swap defaults 0 0
Responses