有时,服务器上面程序跑多了,受限于内存不够,会出现程序被kill掉或者起不来的情况。

这个时候我们可以设置下Swap(交换分区)。Swap(交换分区),类似于 Windows 的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。

1.检查 Swap 空间

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

运行命令:

1
swapon -s

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

然后我们还需要检查下需要把Swap(交换分区)设置的那个目录所在的磁盘是否还有剩余空间,可以使用:df -lh

2.创建 Swap 文件
1
dd if=/dev/zero of=/tmp/swapfile bs=1024 count=1024k

这样就建立一个/tmp/swapfile的分区文件,大小为1G。

参数解读:

1
2
3
4
if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
bs=bytes:同时设置读入/输出的块大小为bytes个字节
count=blocks:仅拷贝blocks个块,块大小等于bs指定的字节数。

3.格式化并激活 Swap 文件

创建好 Swap 文件,还需要格式化后才能使用。运行命令:

1
mkswap /tmp/swapfile

激活 Swap ,运行命令:

1
swapon /tmp/swapfile

如果以上在空间足够的情况下,应该就成功了,可以运行命令:swapon -s 或者 free -m 检查下。

如果要机器重启的时候自动挂载 Swap ,那么还需要修改 fstab 配置。

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

1
/tmp/swapfile swap swap defaults 0 0

赋予 Swap 文件适当的权限:

1
2
chown root:root /tmp/swapfile
chmod 600 /tmp/swapfile

4.修改swappiness

同时,我们还可以修改 Linux Swap 空间的 swappiness ,调整对硬盘的缓存。

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

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

一般swappiness 的默认值是60。

通过以下命令可以查看swappiness的值:

1
cat /proc/sys/vm/swappiness

使用 sysctl 临时性的修改,重启系统会恢复成系统默认,命令:

1
sysctl vm.swappiness=10

永久设置,还需要vi /etc/sysctl.conf,在这个文档的最后加上这样一行:

1
vm.swappiness=10 #可以是其他值,:wq保存后Swap分区在系统重启后都会生效了

其他,删除某swap分区

a.先停止正在使用swap分区:

1
swapoff /tmp/swapfile

b. 删除swap分区文件

1
rm -rf /tmp/swapfile

c.删除掉我们之前在fstab文件里追加的开机自动挂载配置内容:

1
/tmp/swapfile   swap  swap  defaults  0  0