为 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设置为该值。