专栏首页jouypubCentOS7上配置Swap交换空间
原创

CentOS7上配置Swap交换空间

前言

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

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

配置Swap

  1. 检查系统的Swap信息,查看是否已经配置过swap。一个系统可以设置多个swap,不过一般来说一个就够了。 执行swapon -s,如果该命令没有返回出结果,则代表该系统尚未配置过swap。 或者,我们也可以使用free -m来查看系统的整体内存使用情况,这里可以看到内存和swap的使用状态(显示单位为MB): 这里可以看到我们这个系统的total swap空间为0,即没有配置过swap。这与我们在swapon里看到的结果相符合。
free -m
             total       used       free     shared    buffers     cached
Mem:          3953        315       3637          8         11        107
-/+ buffers/cache:        196       3756
Swap:            0          0       4095
  1. 检查可用的存储空间。通常,我们建立一个单独的分区作为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
  1. 创建Swap文件 合适的swap空间是多大?一般来说,内存容量的两倍就是个不错的起点。 接下来我们要在根目录下创建一个名叫swapfile的文件,当然你也可以选择你喜欢的文件名。该文件分配的空间将等于我们需要的swap空间。 最快捷的创建方式是fallocate命令,该命令能够创建一个预分配指定大小空间的文件。输入如下指令创建一个4GB的文件:sudo fallocate -l 4G /swapfile 该swap文件将立即创建完毕。我们可以用ls命令检查文件大小:ls -lh /swapfile 至此,我们的swap文件就创建完毕了。
  2. 启用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

现在,这个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. 使Swap文件永久生效 至此我们已经在系统中启用了swap文件,然而一旦系统重启后,服务器还不能自动启用该文件。要让系统在重启后自动生效swap,我们可以通过修改fstab文件来实现(这是一个管理文件系统和分区的表)。 用sudo权限打开该文件编辑:sudo vim /etc/fstab 在文件末尾加入下面这行内容,告诉操作系统自动使用刚才创建的swap文件: /swapfile swap swap sw 0 0 添加完毕后,保存退出。以后服务器每次重启都会检查该文件并自动启用swap。

更改Swap配置(可选)

有几个涉及swap的选项可能会影响到系统的性能表现。大部分情况下这些选项是可选的

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

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

sudo vim /etc/sysctl.conf
将以下内容粘贴到文件末尾:
vm.swappiness = 10

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

缓存压力(Cache Pressure )

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

通过proc文件系统查看缓存压力的当前设定值:cat /proc/sys/vm/vfs_cache_pressure #100

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

sudo sysctl vm.vfs_cache_pressure=50

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

sudo vim /etc/sysctl.conf
在文件末尾添加如下内容:
vm.vfs_cache_pressure = 50
保存退出,服务器就会在每次重启后都自动将缓存压力设置为50了。

总结

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

如果你仍然会遇到内存不足(OOM,out of memory)的错误信息,或者你的系统不能运行你需要的应用,那么最好的方法是优化你的应用配置或者升级你的服务器。

欢迎订阅「K叔区块链」 - 专注于区块链技术学习

博客地址:http://www.jouypub.com

简书主页:https://www.jianshu.com/u/756c9c8ae984

segmentfault主页:https://segmentfault.com/blog/jouypub

腾讯云主页:https://cloud.tencent.com/developer/column/72548

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux下给文件添加BOM头

    至于BOM是什么,这里就不解释了,百科解释的很详细,BOM - 字节顺序标记(ByteOrderMark)

    JouyPub
  • Linux命令之grep/sed/awk等行转列

       此命令在Linux上执行正常,在Mac上执行无效,原因是因为Mac上的sed是BSD版本,Linux上的是Gnu版本,在Mac上需要使用sed -e 's...

    JouyPub
  • 关于区块链通证模型,你想知道的都在这

      区块链最重要的应用就是将实物价值或虚拟资产映射成链上Token,通过资产上链,实现跨地域、低成本的进行资产交易与转移,本质上是权益再分配,核心是提高激励性和...

    JouyPub
  • Linux环境下swap配置方法

    安装Linux系统之后,默认是没有swap分区,那么我们怎样增加和删除swap分区。

    剑行者
  • ubuntu中swap(虚拟内存)设置方法

    其中count的大小对应swap的大小,如上述代码所示count=100000为大约100M

    砸漏
  • CentOS7系统增加swap的操作方法实例

    swap是位于磁盘上的特殊文件(或分区),属于“虚拟内存”的一部分。通俗点就是内存的备胎,内存充足的情况下,基本上没swap什么事(和设置有关);内存不够用时系...

    砸漏
  • 如何在 CentOS 8 上增加 Swap 空间

    Swap(交换内存)是硬盘上的一个空间,当物理内存耗尽,交换内存就会被使用。当一个 Linux 系统内存不足时,不活跃的内存页,将会被从 RAM 空间 移动到 ...

    雪梦科技
  • linux中Centos7增加swap分区详解

    RAM<=4G,swap=2G;RAM>4G,<16G,swap=4G;RAM>16G,<64G,swap=8G;RAM>64G,<256G,swap=16G

    砸漏
  • Centos7中添加、删除Swap交换分区的方法

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

    砸漏
  • 测者的性能测试手册:SWAP的监控

    swap是磁盘上的一块区域,可以使一个磁盘分区,也可以是一个文件,也可能是一个两种的组合。当物理内存资源紧张的时候,操作系统(Linux)会将一些不常访问的数据...

    Criss@陈磊

扫码关注云+社区

领取腾讯云代金券