关于CentOS7下swap分区创建(添加),删除以及相关配置

小叨下背景:笔者的服务器内存只有1g,少得可怜。之前使用apache,不堪忍受其过量的内存消耗,网站卡得想哭,数据库也不断地崩,无奈投入nginx的怀抱并且已经喜欢上了nginx。

Linux 将物理内存分为内存段,叫做页面。交换是指内存页面被复制到预先设定好的硬盘空间(叫做交换空间)的过程,目的是释放对于页面的内存。物理内存和交换空间的总大小是可用的虚拟内存的总量。

Swap即:交换分区,类似于Windows的虚拟内存,但物理内存不足时,把部分硬盘空间当成虚拟内存使用,从而解决了物理内存容量不足。

优点:节省成本。缺点:性能不足。

这两天我那谁一直在折腾RedHat安装Oracle数据,该数据库有一项要求就是需要一定空间的swap分区。虽然早有耳闻swap分区,而且笔者经常折腾windows下的虚拟内存(swap和虚拟内存是类似概念),却很惭愧一直没想到这个办法,于是——进入今天的主题:

此方法不局限于Centos 7,Linux系统均可使用。

操作用户:root。

在添加swap分区之前我们可以了解下当前系统swap是否存在以及使用情况,可用:

free-h 或 swapon -s

了解硬盘使用情况(一般/dev/vda1为挂载硬盘):

df -hal

1.添加swap交换分区空间

dd命令

编辑dd是Linux/UNIX下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

确定硬盘的最佳块大小:

dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file

dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file

dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file

通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。

使用dd命令创建swap交换分区文件/dev/mapper/swap,大小为2G:

[root@vultr mapper]# dd if=/dev/zero of=/dev/mapper/swap bs=4096 count=512000

512000+0 records in
512000+0 records out
2097152000 bytes (2.1 GB) copied, 2.83708 s, 739 MB/s

[root@vultr mapper]#

格式化swap分区:

[root@vultr mapper]# mkswap /dev/mapper/swap

Setting up swapspace version 1, size = 2047996 KiB
no label, UUID=89015f83-f9ac-4a94-be51-6a6fb903ca4d

设置交换分区:

[root@vultr mapper]# mkswap -f /dev/mapper/swap

mkswap: /dev/mapper/swap: warning: wiping old swap signature.
Setting up swapspace version 1, size = 2047996 KiB
no label, UUID=be57a113-1838-4537-b0ef-d3c427f8295e

激活swap分区:

[root@vultr mapper]# swapon /dev/mapper/swap

swapon: /swap: insecure permissions 0644, 0600 suggested.

执行以上命令可能会出现:“不安全的权限0644,建议使用0600”类似提示,不要紧张,实际上已经激活了,可以忽略提示,也可以听从系统的建议修改下权限:

chmod -R 0600 /dev/mapper/swap

设为开机自动启用:

$ vim /etc/fstab

在该文件底部添加如下内容:

/dev/mapper/swap swap swap default 0 0

或直接对fstab进行echo追加:

echo “/dev/mapper/swapswap swap defaults 0 0”>> /etc/fstab

大功告成!

Centos7下增加swap分区大小

如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Swap空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的,通常Swap空间的大小应是物理内存的2-2.5倍.

此方法不限于centos,linux均适用

以下命令均需在root帐号下操作

1.先用free -m查看一下swap的大小

2. 使用dd命令创建/home/swap这么一个分区文件。文件的大小是512000个block,一般情况下1个block为1K,所以这里空间是512M。

#dd if=/dev/zero of=/dev/mapper/swap bs=1024 count=512000

3.接着再把这个分区变成swap分区。

#/sbin/mkswap /dev/mapper/swap

4.再接着使用这个swap分区。使其成为有效状态。

#/sbin/swapon /dev/mapper/swap

现在再用free -m命令查看一下内存和swap分区大小,就发现增加了512M的空间了。

删除某swap分区

先停止正在使用swap分区:

swapoff /dev/mapper/swap

删除swap分区文件

rm -rf /dev/mapper/swap

删除或注释掉我们之前在fstab文件里追加的开机自动挂载配置内容:/dev/mapper/swapswap swap defaults 0 0
3.更改Swap配置(进阶级)
swappiness值(0-100),系统对swap分区的依赖程度,越高则越倾向于使用swap分区。当然,高度依赖swap会造成物理内存远未使用完,就使用swap分区,我们知道swap分区性能远不如物理内存,这反而降低了系统性能,违背了我们创建swap分区的初衷。我们希望在物理内存即将满荷时再使用swap,这就决定了swappiness值一般为10-60为宜,固态硬盘可以偏高些。查看当前的swappiness数值:

cat /proc/sys/vm/swappiness

修改swappiness值,这里以50为例。

sysctl vm.swappiness=50

若希望vm.swappiness=50永久生效,则需要修改sysctl配置文件,直接echo追加配置内容,重启系统后即可生效:

echo “vm.swappiness = 50”>> /etc/sysctl.conf

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code