目录

为 Centos 7 分配SWAP(交换分区)

经过Mariadb数次异常停摆后,查出来内存溢出错误。为啥以前就没有出过这个问题。free指令一看,我怎么没有swap分区!整理了一下Linux下分配交换分区的指令,以备后用。

当前环境为Centos 7,root用户

检查系统的Swap信息

首先我们需要检查系统的存储,看看是否已经配置过swap。一个系统可以设置多个swap文件或分区,不过一般来说一个就够了。

swapon -s

如果该命令没有返回出结果,则代表该系统尚未配置过swap。

检查可用的存储空间

开始之前,先检查一下磁盘的可用空间。输入如下指令:

df -h

创建Swap文件夹

最快捷的创建方式是fallocate命令,该命令能够创建一个预分配指定大小空间的文件。输入如下指令创建一个4GB的文件:

fallocate -l 4G /swapfile

启用Swap文件

chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

我们可以输入如下命令来确认一下设置是否已经生效:

swapon -s
free -m

使Swap文件永久生效

至此我们已经在系统中启用了swap文件,然而一旦系统重启后,服务器还不能自动启用该文件。要让系统在重启后自动生效swap,我们可以通过修改fstab文件来实现(这是一个管理文件系统和分区的表)。

nano /etc/fstab

在文件末尾加入下面这行内容,告诉操作系统自动使用刚才创建的swap文件:

/swapfile   swap    swap    sw  0   0

更改Swap配置

修改Swap大小

第一步:关闭SWAP

swapoff -a

第二步:把当前的SWAP文件增大

dd if=/dev/zero of=/swapfile bs=1M count=1024

bs指的是Block Size,就是每一块的大小。这里的例子是1M,意思就是count的数字,是以1M为单位的。 counter是告诉程序,新的swapfile要多少个block。这里是1024,就是说,新的swap文件是1G大小。

第三步:把增大后的文件变为swap文件。

mkswap /swapfile

第四步:重新打开swap

swapon /swapfile

Swappiness

swappiness参数决定了系统将数据从内存交换到swap空间的频率,数值设置在0到100之间,代表系统将数据从内存交换到swap空间的力度。

输入如下命令查看当前的swappiness数值:

cat /proc/sys/vm/swappiness

CentOS 7默认设置了30的swappiness,这对于大部分桌面系统和本地服务器是比较中庸的数值。对于VPS系统而言,可能接近于0的值是更加合适的。

使用sysctl命令可以修改swappiness。比如将swappiness设为10:

sudo sysctl vm.swappiness=10

本次修改将一直生效到下次重启前。如果希望永久修改该数值,则需要编辑sysctl配置文件:

sudo nano /etc/sysctl.conf

将以下内容粘贴到文件末尾:

vm.swappiness = 10

编辑完成后,保存退出,之后服务器每次重启的时候会将swappiness设置为该值。