怎样设置SWAP分区

2016年1月12日 | 分类: 【技术】

【介绍】

Linux中SWAP(交换分区)类似Windows的虚拟内存。当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。

增加SWAP空间的方法有两个:增加另外一个SWAP分区,或通过创建一个SWAP文件来实现。

【设置】

设置前检查:

在设置 Swap 文件之前,有必要先检查一下系统里有没有既存的 Swap 文件。

swapon -s

如果返回的信息概要是空的,则表示 Swap 文件不存在。

检查一下文件系统,看看是否有足够的硬盘空间来设置 Swap 。

df -hal

创建Swap文件:

限制:
1. 最多创建32个swap。
2. 由于x86(64)最大寻址64GB,swap最大只能是64GB
3. swap分区最适合的大小是物理内存的1-2倍。
4. 如果使用的是2.4内核或者64位的系统,那么可以swap分区设置最大不超过24GB。

dd if=/dev/zero of=/swapfile bs=1024 count=2048k

参数:
if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
bs=bytes:同时设置读入/输出的块大小为bytes个字节,由于磁盘存取的最小单位为扇区,因此设置bs也等于设置每个扇区的大小。
count=blocks:仅拷贝blocks个块,块大小等于bs指定的字节数。

因此,可以使用的硬盘空间就等于bs*count。可以使用的硬盘空间等于1024*2048=2097152(KB),等于2048MB,等于2G。

输出:

2097152+0 records in
2097152+0 records out
2147483648 bytes (2.1 GB) copied, 5.62415 s, 382 MB/s

显示已分配2GB用于SWAP分区。

格式化Swap文件:

mkswap /swapfile

输出:

Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=8cdf780f-6583-43ee-9b00-e4e5db527aa8

赋予 Swap 文件以适当权限:

chown root:root /swapfile && chmod 0600 /swapfile

激活 Swap文件:

swapon /swapfile

查看 Swap文件:

swapon -s

输出:

Filename                                Type            Size    Used    Priority
/swapfile                               file    8388604 0       -1

修改 fstab 配置实现重启时自动挂载 Swap:

【注意】此文件务必手工更改,因为不同VPS的硬盘编码是不一样的。

打开 /etc/fstab 文件,在其最后添加如下一行:

/swapfile          swap            swap    defaults        0 0

删除SWAP:

swapoff /swapfile
sudo rm /swapfile

【扩展】

修改 Linux Swap 空间的 swappiness ,降低对硬盘的缓存。

Linux 会使用硬盘的一部分做为 Swap 分区,用来进行进程调度–进程是正在运行的程序–把当前不用的进程调成‘等待(standby)’,甚至‘睡眠(sleep)’,一旦要用,再调成‘活动(active)’,睡眠的进程就会在 Swap 分区,把内存空出来让给‘活动’的进程。

如果内存够大,应当告诉 Linux 不必太多的使用 Swap 分区,可以通过修改 swappiness 的参数来设置。swappiness=0 的时候表示最大限度使用物理内存,然后才是 Swap 空间,swappiness=100 的时候表示积极的使用 Swap 分区,并且把内存上的数据及时的搬运到 Swap 空间里面。

在 CentOS 中,swappiness 的默认值是60。

通过以下命令可以看到:

cat /proc/sys/vm/swappiness

返回值60。

我们可以调整 swappiness 的值到一个合适的参数,从而达到最优化使用 Swap 的目的。这里我们将其设为10。

sysctl vm.swappiness=10

但是这只是临时性的修改,在你重启系统后会恢复默认的60,要永久设置,还需要在 vim 中修改sysctl.conf:

vi /etc/sysctl.conf

在这个文档的最后加上这样一行:

# Search for the vm.swappiness setting.  Uncomment and change it as necessary.
vm.swappiness=10

输入:x,保存退出 vim 。

这样一来,Swap 分区重启后都会生效了。

Linux下察看swap分区大小的命令:

top

或者:

fdisk -l

或者;

free -m

【报错】

注意:在 /dev 下创建SWAP文件可能报错,因为 /dev 下面都是系统设备。

参考:http://www.reader8.cn/jiaocheng/20120413/2000821.html

swapon /dev/swap

输出:

swapon: /dev/swap: swapon failed: Invalid argument

【参考】

参考:http://sujing2857.blog.163.com/blog/static/74485462009101143013852/
参考:http://blog.csdn.net/wfdtxz/article/details/7332235
参考: http://blog.csdn.net/cyuyan112233/article/details/18803589