CentOS 7上添加Swap交换空间

***************************** 

我们有一个游戏项目,做了分布式开发,每个功能一个进程单独运行。随着业务增加,进程也越来越多,最后在运行的时候,突然发现内存不够用了,而且我们使用的Linux没有提供swap空间,在测试阶段没有必要购买太大的内存,因为那玩意太贵了。所以可以使用swap空间。下面说一下怎么给linux添加swap空间

CentOS 7上添加Swap交换空间

提供:ZStack云计算

经常看到有些Linux国内汉化版)安装手册上有这样的说明:Swap空间不能超过128M。为什么会有这种说法?在说明“128M”这个数字的来历之前,先给问题一个回答:现在根本不存在128M的限制!现在的限制是2G!

Linux下Swap空间的添加 

以下的操作都要在root用户下进行,首先先建立一个分区,采用dd命令比如

前言

如何让服务器响应更快?如何避免应用出现内存不足的错误?最简单的方法就是增加交换空间。Swap是存储盘上的一块自留地,操作系统可以在这里暂存一些内存里放不下的东西。

这从某种程度上相当于增加了服务器的可用内存。虽然从swap读写比内存慢,但总比没有好,算是内存不够时的安全网。

如果没有swap,则服务器一旦内存不足,就会开始终止应用以释放内存,甚至会崩溃,这会让你丢失一些还没来得及保存的数据,或者造成当机。有些应用明确要求系统配置swap以确保数据访问的可靠性。

本文介绍如何在CentOS 7服务器上创建并启用swap文件。

注:swap通常在传统机械硬盘上表现更好,在SSD上使用swap可能会造成问题,尤其是硬件老化之后。所以,对于DigitalOcean以及其他使用基于SSD的云主机服务的用户,我们不推荐启用swap。这甚至会影响到跟你的虚拟机共用宿主机的其他用户。

对于DigitalOcean用户,提升性能的最佳方法就是更新Droplet。通常来说,升级后的主机表现都会有所提升,并且更不容易受到硬件问题的影响。

前言

如何让服务器响应更快?如何避免应用出现内存不足的错误?最简单的方法就是增加交换空间。Swap是存储盘上的一块自留地,操作系统可以在这里暂存一些内存里放不下的东西。

这从某种程度上相当于增加了服务器的可用内存。虽然从swap读写比内存慢,但总比没有好,算是内存不够时的安全网。

澳门威尼斯人网址 ,如果没有swap,则服务器一旦内存不足,就会开始终止应用以释放内存,甚至会崩溃,这会让你丢失一些还没来得及保存的数据,或者造成当机。有些应用明确要求系统配置swap以确保数据访问的可靠性。

本文介绍如何在CentOS 7服务器上创建并启用swap文件。

注:swap通常在传统机械硬盘上表现更好,在SSD上使用swap可能会造成问题,尤其是硬件老化之后。所以,对于DigitalOcean以及其他使用基于SSD的云主机服务的用户,我们不推荐启用swap。这甚至会影响到跟你的虚拟机共用宿主机的其他用户。

对于DigitalOcean用户,提升性能的最佳方法就是更新Droplet。通常来说,升级后的主机表现都会有所提升,并且更不容易受到硬件问题的影响。

Swap空间是分页的,每一页的大小和内存页的大小一样,方便Swap空间和内存之间的数据交换。旧版本的Linux实现Swap空间时,用Swap空间的第一页作为所有Swap空间页的一个“位映射”Bit
map)。这就是说第一页的每一位,都对应着一页Swap空间。如果这一位是1,表示此页Swap可用;如果是0,表示此页是坏块,不能使用。

环境:CentOS 6.2

dd if=/dev/zero of=/home/swap bs=1024 count=512000澳门威呢斯人

准备工作

首先,你需要一台CentOS
7服务器,配置过具备sudo权限的非root用户(配置过程可参考这个教程的第一到第四步骤)。

准备就绪后,以该用户名SSH到你的CentOS服务器上,准备安装swap文件。

准备工作

首先,你需要一台CentOS
7服务器,配置过具备sudo权限的非root用户(配置过程可参考这个教程的第一到第四步骤)。

准备就绪后,以该用户名SSH到你的CentOS服务器上,准备安装swap文件。

这么说来,第一个Swap映射位应该是0,因为,第一页Swap是映射页。另外,最后10个映射位也被占用,用来表示Swap的版本原来的版本是Swap_space
,现在的版本是swapspace2)。

author:  youseesan 

这样就会创建/home/swap这么一个分区文件。文件的大小是512000个block,一般情况下1个block为1K,所以这里空间是512M。接着再把这个分区变成swap分区。

检查系统的Swap信息

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

使用swapon命令可以检查系统是否已经配置过swap,这是一个通用的swap工具。使用-s标签可列出当前存储设备上的swap使用情况:

swapon -s

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

或者,我们也可以使用free工具来查看系统的整体内存使用情况,这里可以看到内存和swap的使用状态(显示单位为MB):

free -m             total       used       free     shared    buffers     cachedMem:          3953        315       3637          8         11        107-/+ buffers/cache:        196       3756Swap:            0          0       4095

这里可以看到我们这个系统的total
swap空间为0,即没有配置过swap。这与我们在swapon里看到的结果相符合。

检查系统的Swap信息

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

使用swapon命令可以检查系统是否已经配置过swap,这是一个通用的swap工具。使用-s标签可列出当前存储设备上的swap使用情况:

swapon -s

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

或者,我们也可以使用free工具来查看系统的整体内存使用情况,这里可以看到内存和swap的使用状态(显示单位为MB):

free -m


             total       used       free     shared    buffers     cached
Mem:          3953        315       3637          8         11        107
-/+ buffers/cache:        196       3756
Swap:            0          0       4095

这里可以看到我们这个系统的total
swap空间为0,即没有配置过swap。这与我们在swapon里看到的结果相符合。

那么,如果说一页的大小为s,这种Swap的实现方法共能管理“8 * ( s – 10 ) –
1”个Swap页。对于i386系统来说s=4096,则空间大小共为133890048,如果认为1
MB=2^20 Byte的话,大小正好为128M。

******************************
 

/sbin/mkswap /home/swap

检查可用的存储空间

通常,我们建立一个单独的分区作为swap。然而有时候由于硬件或软件的限制,新建分区的方式无法实现,这种情况下就可以建立一个swap文件来实现同样的功能。

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

df -hFilesystem      Size  Used Avail Use% Mounted on/dev/vda1        59G  1.5G   55G   3% /devtmpfs        2.0G     0  2.0G   0% /devtmpfs           2.0G     0  2.0G   0% /dev/shmtmpfs           2.0G  8.3M  2.0G   1% /runtmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup

这里的-h标记是为了告诉dh将信息输出为对人类友好的格式,比如以MB或GB为单位输出空间使用和空余情况,而不是直接输出内存块的个数。

从第一行可以看到我们的存储分区上还有59GB的空间剩余,这足够我们操作了。(我这是一台中等规模的新建云主机,每个人的情况可能有很大不同。)

合适的swap空间是多大?关于这个问题有很多种选择,这取决于你的应用需求和你个人的偏好。一般来说,内存容量的两倍就是个不错的起点。

我的系统内存有4GB,如果设置8GB的swap会占据太多空间,所以我决定只设置4GB就好。

检查可用的存储空间

通常,我们建立一个单独的分区作为swap。然而有时候由于硬件或软件的限制,新建分区的方式无法实现,这种情况下就可以建立一个swap文件来实现同样的功能。

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

df -h


Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        59G  1.5G   55G   3% /
devtmpfs        2.0G     0  2.0G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G  8.3M  2.0G   1% /run
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup

这里的-h标记是为了告诉dh将信息输出为对人类友好的格式,比如以MB或GB为单位输出空间使用和空余情况,而不是直接输出内存块的个数。

从第一行可以看到我们的存储分区上还有59GB的空间剩余,这足够我们操作了。(我这是一台中等规模的新建云主机,每个人的情况可能有很大不同。)

合适的swap空间是多大?关于这个问题有很多种选择,这取决于你的应用需求和你个人的偏好。一般来说,内存容量的两倍就是个不错的起点。

我的系统内存有4GB,如果设置8GB的swap会占据太多空间,所以我决定只设置4GB就好。

之所以这样来实现Swap空间的管理,是要防止Swap空间中有坏块。如果系统检查到Swap中有坏块,则在相应的位映射上标记上0,表示此页不可用。这样在使用Swap时,不至于用到坏块,而使系统产生错误。

mkdir /var/swap  www.2cto.com  

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

创建Swap文件

接下来我们将在文件系统上创建swap文件。我们要在根目录(/)下创建一个名叫swapfile的文件,当然你也可以选择你喜欢的文件名。该文件分配的空间将等于我们需要的swap空间。

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

sudo fallocate -l 4G /swapfile

输入密码后,该swap文件将立即创建完毕。我们可以用ls命令检查文件大小:

ls -lh /swapfile-rw-r--r-- 1 root root 4.0G Oct 30 11:00 /swapfile

至此,我们的swap文件就创建完毕了。

创建Swap文件

接下来我们将在文件系统上创建swap文件。我们要在根目录(/)下创建一个名叫swapfile的文件,当然你也可以选择你喜欢的文件名。该文件分配的空间将等于我们需要的swap空间。

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

sudo fallocate -l 4G /swapfile

输入密码后,该swap文件将立即创建完毕。我们可以用ls命令检查文件大小:

ls -lh /swapfile


-rw-r--r-- 1 root root 4.0G Oct 30 11:00 /swapfile

至此,我们的swap文件就创建完毕了。

现在的系统设计者认为:

—创建指定大小的文件file.swp  1024字节 65536/1024=64M 

/sbin/swapon /home/swap

启用Swap文件

现在我们已经有了swap文件,但系统还不知道应该使用该文件作为swap,这就需要我们告知系统将该文件格式化为swap并启用起来。

首先我们需要更改swap文件的权限,确保只有root才可读,否则会有很大的安全隐患。使用chmod命令进行权限操作:

sudo chmod 600 /swapfile

如此,该文件的读写都只有root才能操作。使用ls -lh命令检查一下:

ls -lh /swapfile-rw------- 1 root root 4.0G Oct 30 11:00 /swapfile

然后,使用如下命令告知系统将该文件用于swap:

sudo mkswap /swapfileSetting up swapspace version 1, size = 4194300 KiBno label, UUID=b99230bb-21af-47bc-8c37-de41129c39bf

现在,这个swap文件就可以作为swap空间使用了。输入如下命令开始使用该swap:

sudo swapon /swapfile

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

swapon -sFilename                Type        Size    Used    Priority/swapfile               file        4194300 0     -1

可以看到返回的结果中已经有我们刚才设置的swap。再使用free工具确认一下:

free -m             total       used       free     shared    buffers     cachedMem:          3953        315       3637          8         11        107-/+ buffers/cache:        196       3756Swap:         4095          0       4095

至此,我们的swap已经设置完毕,操作系统会在需要的时候使用它。

启用Swap文件

现在我们已经有了swap文件,但系统还不知道应该使用该文件作为swap,这就需要我们告知系统将该文件格式化为swap并启用起来。

首先我们需要更改swap文件的权限,确保只有root才可读,否则会有很大的安全隐患。使用chmod命令进行权限操作:

sudo chmod 600 /swapfile

如此,该文件的读写都只有root才能操作。使用ls -lh命令检查一下:

ls -lh /swapfile


-rw------- 1 root root 4.0G Oct 30 11:00 /swapfile

然后,使用如下命令告知系统将该文件用于swap:

sudo mkswap /swapfile


Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=b99230bb-21af-47bc-8c37-de41129c39bf

现在,这个swap文件就可以作为swap空间使用了。输入如下命令开始使用该swap:

sudo swapon /swapfile

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

swapon -s


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

可以看到返回的结果中已经有我们刚才设置的swap。再使用free工具确认一下:

free -m


             total       used       free     shared    buffers     cached
Mem:          3953        315       3637          8         11        107
-/+ buffers/cache:        196       3756
Swap:         4095          0       4095

至此,我们的swap已经设置完毕,操作系统会在需要的时候使用它。

1.现在硬盘质量很好,坏块很少。

[[email protected]
~]# dd if=/dev/zero of=/var/swap/file.swp bs=1024 count=65536 

现在再用free
-m命令查看一下内存和swap分区大小,就发现增加了512M的空间了。不过当计算机重启了以后,发现swap还是原来那么大,新的swap没有自动启动,还要手动启动。那我们需要修改/etc/fstab文件,增加如下一行

使Swap文件永久生效

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

sudo权限打开该文件编辑:

sudo nano /etc/fstab

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

/swapfile   swap    swap    sw  0   0

添加完毕后,保存退出。以后服务器每次重启都会检查该文件并自动启用swap。

使Swap文件永久生效

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

sudo权限打开该文件编辑:

sudo nano /etc/fstab

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

/swapfile   swap    swap    sw  0   0

添加完毕后,保存退出。以后服务器每次重启都会检查该文件并自动启用swap。

2.就算有,也不多,只需要将坏块罗列出来,而不需要为每一页建立映射。

记录了65536+0 的读入 

/home/swap     swap        swap    defaults 0 0

更改Swap配置(可选)

有几个涉及swap的选项可能会影响到系统的性能表现。大部分情况下这些选项是可选的,具体要修改成什么样则取决于你的应用需求以及个人偏好。

更改Swap配置(可选)

有几个涉及swap的选项可能会影响到系统的性能表现。大部分情况下这些选项是可选的,具体要修改成什么样则取决于你的应用需求以及个人偏好。

3.如果有很多坏块,就不应该将此硬盘作为Swap空间使用。
于是,现在的Linux取消了位映射的方法,也就取消了128M的限制。直接用地址访问,限制为2G。

记录了65536+0 的写出 
 

你就会发现你的机器自动启动以后swap空间也增大了。

Swappiness

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

该数值越接近于0,系统越倾向于不进行swap,仅在必要的时候进行swap操作。由于swap要比内存慢很多,因此减少对swap的依赖意味着更高的系统性能。

该数值越接近于100,系统越倾向于多进行swap。有些应用的内存使用习惯更适合于这种情况,这也于服务器的用途有关。

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

cat /proc/sys/vm/swappiness30

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

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

sudo sysctl vm.swappiness=10vm.swappiness = 10

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

sudo nano /etc/sysctl.conf

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

vm.swappiness = 10

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

Swappiness

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

该数值越接近于0,系统越倾向于不进行swap,仅在必要的时候进行swap操作。由于swap要比内存慢很多,因此减少对swap的依赖意味着更高的系统性能。

该数值越接近于100,系统越倾向于多进行swap。有些应用的内存使用习惯更适合于这种情况,这也于服务器的用途有关。

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

cat /proc/sys/vm/swappiness


30

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

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

sudo sysctl vm.swappiness=10


vm.swappiness = 10

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

sudo nano /etc/sysctl.conf

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

vm.swappiness = 10

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

67108864字节(67 MB)已复制,1.05399 秒,63.7 MB/秒 

缓存压力(Cache Pressure )

另一个可以考虑更改的配置项是vfs_cache_pressure,该配置项涉及特殊文件系统元文件条目的存储。对此类信息的频繁读取是非常消耗性能的,所以延长其在缓存的保存时间可以提升系统的性能。

通过proc文件系统查看缓存压力的当前设定值:

cat /proc/sys/vm/vfs_cache_pressure100

这个数值是比较高的,意味着系统从缓存中移除inode信息的速度比较快。一个保守一些的数值是50,使用sysctl命令进行设置:

sudo sysctl vm.vfs_cache_pressure=50vm.vfs_cache_pressure = 50

这条命令仅在重启前有效。要让该设置永久有效,需要编辑sysctl配置文件:

sudo nano /etc/sysctl.conf

在文件末尾添加如下内容:

vm.vfs_cache_pressure = 50

保存退出,服务器就会在每次重启后都自动将缓存压力设置为50了。

缓存压力(Cache Pressure )

另一个可以考虑更改的配置项是vfs_cache_pressure,该配置项涉及特殊文件系统元文件条目的存储。对此类信息的频繁读取是非常消耗性能的,所以延长其在缓存的保存时间可以提升系统的性能。

通过proc文件系统查看缓存压力的当前设定值:

cat /proc/sys/vm/vfs_cache_pressure


100

这个数值是比较高的,意味着系统从缓存中移除inode信息的速度比较快。一个保守一些的数值是50,使用sysctl命令进行设置:

sudo sysctl vm.vfs_cache_pressure=50


vm.vfs_cache_pressure = 50

这条命令仅在重启前有效。要让该设置永久有效,需要编辑sysctl配置文件:

sudo nano /etc/sysctl.conf

在文件末尾添加如下内容:

vm.vfs_cache_pressure = 50

保存退出,服务器就会在每次重启后都自动将缓存压力设置为50了。

[[email protected]
~]#

总结

至此,我们的系统内存就获得了一些喘气的空间。有了swap空间可以有效避免一些常见的问题。

如果你仍然会遇到内存不足(OOM,out of
memory)的错误信息,或者你的系统不能运行你需要的应用,那么最好的方法是优化你的应用配置或者升级你的服务器,不过配置swap空间也不失为一个灵活的节省方案。

本文来源自DigitalOcean Community。英文原文:How To Add Swap on CentOS
7byJosh Barnett

7上添加Swap交换空间 前言
如何让服务器响应更快?如何避免应用出现内存不足的错误?最简单的方法就是增加交换空间。Swap是存储盘…

总结

至此,我们的系统内存就获得了一些喘气的空间。有了swap空间可以有效避免一些常见的问题。

如果你仍然会遇到内存不足(OOM,out of
memory)的错误信息,或者你的系统不能运行你需要的应用,那么最好的方法是优化你的应用配置或者升级你的服务器,不过配置swap空间也不失为一个灵活的节省方案。

本文来源自DigitalOcean
Community。英文原文:How To
Add Swap on CentOS
7
by Josh Barnett

翻译:lazycai

—-UUID=7b2d46b8-6448-43d5-86e0-fffa0c798965作为卷标 

[[email protected]
~]# mkswap /var/swap/file.swp 

mkswap: /var/swap/file.swp: warning: don’t erase bootbits sectors 

        on whole disk. Use -f to force. 

Setting up swapspace version 1, size = 65532 KiB 

no label, UUID=7b2d46b8-6448-43d5-86e0-fffa0c798965
 

vi /etc/fstab –添加下面一行,系统启动后自动加载 

——————————————————————————— 

/var/swap/file.swp         swap         swap    defaults        0 0 


  www.2cto.com  

[[email protected]
~]# free -m 

             total       used       free     shared    buffers    
cached 

Mem:          1266        364        901          0         17      
 181 

-/+ buffers/cache:        165       1100 

Swap:         2918          0       2918 

[[email protected]
~]#
 

—开启swap添加 

[[email protected]
~]# swapon /var/swap/file.swp 

[[email protected]
~]# free -m 

             total       used       free     shared    buffers    
cached 

Mem:          1266        364        901          0         17      
 181 

-/+ buffers/cache:        165       1100 

Swap:         2982          0       2982 

[[email protected]
~]#

  www.2cto.com  

—关闭swap添加 

[[email protected]
~]# swapoff /var/swap/file.swp 

[[email protected]
~]# free -m 

             total       used       free     shared    buffers    
cached 

Mem:          1266        364        901          0         17      
 181 

-/+ buffers/cache:        165       1100 

Swap:         2918          0       2918 

[[email protected]
~]#
 

Linux下Swap空间的添加 环境:CentOS 6.2 author: youseesan
****************************** mkdir
/var/swap www.2cto.com —创建指定大小的文…

发表评论

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