前言

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

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

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

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

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

准备工作

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

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

swapon -s

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

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

[root@qiang ~]# free -mtotal        used        free      shared  buff/cache   available
Mem:            992         274          74          56         643         497
Swap:             0           0           0

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

检查可用的存储空间

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

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

[root@qiang ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        25G  6.4G   17G  28% /
devtmpfs        487M     0  487M   0% /dev
tmpfs           497M     0  497M   0% /dev/shm
tmpfs           497M   57M  441M  12% /run
tmpfs           497M     0  497M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/0

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

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

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

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

通常情况下,Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的2-2.5倍。但根据不同的应用,应有不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器,随着访问量的增加,对Swap空间的要求也会增加,一般来说对于4G 以下的物理内存,配置2倍的swap,4G 以上配置1倍。

创建Swap文件

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

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

fallocate -l 2G /swapfile

我们可以用ls命令检查文件大小:

[root@qiang ~]# ls -lh /swapfile
-rw-r--r-- 1 root root 2.0G Dec  2 01:45 /swapfile

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

启用Swap文件

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

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

[root@qiang ~]# chmod 600 /swapfile

使用ls -lh命令检查一下:

[root@qiang ~]# ls -lh /swapfile
-rw------- 1 root root 2.0G Dec  2 01:45 /swapfile

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

[root@qiang ~]# mkswap /swapfile
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=04a9f497-0e0a-43b3-b3ae-d28264fc1bdc

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

[root@qiang ~]# swapon /swapfile

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

[root@qiang ~]# swapon -s
Filename                Type        Size    Used    Priority
/swapfile                                  file    2097148    0    -1

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

[root@qiang ~]# free -mtotal        used        free      shared  buff/cache   available
Mem:            992         273          73          56         645         498
Swap:          2047           0 

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

使Swap文件永久生效

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

打开该文件编辑:

[root@qiang ~]# 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/swappiness30

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

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

sysctl vm.swappiness=10vm.swappiness = 10

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

vim /etc/sysctl.conf

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

vm.swappiness = 10

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

缓存压力(Cache Pressure )

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

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

cat /proc/sys/vm/vfs_cache_pressure100

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

sysctl vm.vfs_cache_pressure=50vm.vfs_cache_pressure = 50

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

vim /etc/sysctl.conf

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

vm.vfs_cache_pressure = 50

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

总结

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

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

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

转载于:https://www.cnblogs.com/qiangshenqi/p/7953597.html

給服务器增加swap空间缓解内存压力相关推荐

  1. 4.5-4.9 磁盘格式化,磁盘挂载,手动增加swap空间

    4.5/4.6 磁盘格式化 4.7/4.8 磁盘挂载 4.9 手动增加swap空间  4.5 磁盘格式化(上) centos7所支持的文件系统: # cat /etc/filesystems xfsc ...

  2. 磁盘格式化、磁盘挂载、手动增加swap空间

    一.磁盘格式化 1.cat /etc/filesystems 查看centuos7支持的文件系统格式 查看分区文件系统 mount swap分区为swap格式,这是swap特有的格式 格式化命令 mk ...

  3. 4.5/4.6 磁盘格式化 4.7/4.8 磁盘挂载 4.9 手动增加swap空间

    4.5/4.6 磁盘格式化 cat /etc/filesysteems =>查看系统的分区格式 moutn=〉查看分区的文件格式 Centos7之后的版本默认的都是使用xfs分区格式 (文件系统 ...

  4. 三周第五次课) 4.5/4.6 磁盘格式化 4.7/4.8 磁盘挂载 4.9 手动增加swap空间

    三周第五次课 4.5/4.6 磁盘格式化 4.7/4.8 磁盘挂载 4.9 手动增加swap空间 4.5/4.6 磁盘格式化 cat /etc/filesystems 查看文件格式 (win系统的格式 ...

  5. 磁盘格式化,磁盘挂载,手动增加swap空间

    磁盘格式化 首先看一下CentOS7支持那些磁盘格式:cat /etc/filesystems [root@localhost ~]# cat /etc/filesystems xfs ext4 ex ...

  6. Linux设置swap分区为128g,linux增加swap空间的方法小结

    linux增加swap空间的方法小结 我的系统是Ubuntu 18.04. Linux下swap空间大小通常在安装系统时设置swap分区时预设的,不过系统提供了添加或改动swap分区的命令. 涉及的命 ...

  7. linux centos7如何格式化磁盘,Linux CentOS 7 磁盘格式化mke2fs、mkfs.ext4、磁盘挂载及手动增加swap空间...

    一. 磁盘格式化 查看系统支持的分区类型: cat /etc/filesystems[root@fxq-1 ~]# cat /etc/filesystems xfs ext4 ext3 ext2 no ...

  8. 26期20180615磁盘格式化挂载以及手动增加swap空间

    6月15日任务 4.5/4.6 磁盘格式化 4.7/4.8 磁盘挂载 4.9 手动增加swap空间 磁盘格式化 分区后只有格式化后才可以使用 可以查看文件系统  cat /etc/filesystem ...

  9. 4.5/4.6 磁盘格式化 4.7/4.8 磁盘挂载 4.9 手动增加swap空间

    2019独角兽企业重金招聘Python工程师标准>>> 4.5/4.6 磁盘格式化 cat etc/filesystems 系统支持的文件系统格式 查看系统文件格式 mount 格式 ...

最新文章

  1. 如何利用魔棒工具抠图_3秒搞定抠图!免费在线抠图工具
  2. 从抖音关闭评论,看服务治理的重要性
  3. 华为手机鸿蒙系统官方下载入口,华为鸿蒙系统官方版-华为鸿蒙操作系统官方内侧入口 v1.0.0预约_手机乐园...
  4. 腾讯云首次公开边缘计算网络开源平台,拥抱5G与万物互联
  5. 如何将SAP API Hub 上提供的工作流导入到 SAP BTP 上
  6. 读写文件、文件方法、python2的乱码问题、python对passwd文件进行排序
  7. 超出文本隐藏并且显示省略号
  8. Java连接MySQL8.0以上版本数据库方式
  9. 开关电路的三极管特性
  10. echarts 获取点击的y轴数值_ECharts关系图
  11. 分表用到的一些函数/php mysql 前面补0
  12. 页面刷新_刷新vue页面,解决数据丢失
  13. 云WAF之语义分析引擎
  14. 乐鑫Esp32学习之旅28 熟悉自定义分区表 partition,拉取阿里云OSS对象存储的单片机/图片等较大文件保存在特定的存储位置,并读取出来做完整性校验,保证数据的完整性。(附带源码)
  15. 基于mysql学生签到_Java swing mysql学生签到考勤系统附带完整源码及开发视频
  16. oracle数据比对md5,MD5SUM的妙用
  17. 自研DCI网络路由交换协议DCIP-白牌交换机时代的企业网络
  18. jQuery锁定页面元素(表格列)
  19. [渝粤教育] 南宁学院 Python程序设计 参考 资料
  20. vue项目中引入Luckysheet

热门文章

  1. 【转】ubuntu 12.04 LTS将关闭最大化最小化移动到右上角
  2. 平时碰到的一些编程题
  3. Android Images
  4. 鼓励自己最有效的20个方法
  5. 用CLIP增强视频语言的理解,在VALUE榜单上SOTA!
  6. CVPR 2021 | 基于随机标签的神经架构搜索
  7. 谷歌CEO支持欧盟禁止人脸识别!微软总裁:能用“手术刀”就别用“切肉刀”...
  8. 67页综述深度卷积神经网络架构:从基本组件到结构创新
  9. 全球首个!腾讯优图开源3D医疗影像大数据预训练模型
  10. 3D重建:硬派几何求解vs深度学习打天下?