SWAP是什么?SWAP有什么用?SWAP怎么用?

投稿   大伟哥博客  2018-07-01 07:03:20  120 人阅读  20 条评论

写这个帖子的原因是有网友在广告中国论坛问怎么样才能删除掉 VPS 的SWAP 分区,大伟哥借机会在这里对VPS新手和站长管理员做个有关Linux SWAP 的基础小科普,是给新手看的,高深的东西大伟哥是真的不会。

什么是 SWAP?SWAP 有什么用?

swap 是类 Unix 操作系统下虚拟内存技术的实现。简单地说,swap 文件或者 swap 分区(交换区)就是把一部分硬盘空间拿出来,模拟成备用的内存给 linux 使用。Linux 系统在运行中会把内存中暂时用不到的部分数据放在 swap 分区中保存,把宝贵的内存资源分配给其他更加需要内存的程序使用。

SWAP是什么?SWAP有什么用?SWAP怎么用? 建站经验 第1张

合理地配置和使用 swap,可以让 Linux 在有限的硬件配置下完成更多的处理任务。另外,有了 swap 的缓冲,还可以避免 linux 系统做出一些过激的保护机制(OOM),在内存不够用的情况下杀死某些虽然占用内存很多但却非常重要的服务进程,比如mysql数据库服务。作为一台网站服务器,底层的数据库进程没有了,web server 即使还在运行,取不到数据又有什么用呢?所以有些主机商比如 Linode 会在管理面板里直接提供相应的功能,让你很方便地创建 swap 分区。

然而,swap 毕竟是硬盘虚拟出来的假的内存,比起物理内存的读取速度来肯定是非常渣的,同时,如果频繁地在内存和 swap 之间进行 IO 操作,也会带来额外的系统开销。因此过多的依赖 swap 分区,可能会拖慢系统的性能。这也是为什么有些主机商比如阿里云不推荐你使用 swap 的原因(你可以加钱升级到更大内存的套餐啊亲)。

大伟哥个人认为,在目前云服务器内存还不是很大的情况下,swap 还是需要使用的,至少大伟哥自己就碰到过因为数据库进程被强行 kill 引起的网站崩溃问题。如果怕占用太多硬盘空间,你可以把 swap 设置小一点。另外,为了让系统尽量少使用 swap 而多使用物理内存,还可以通过调低 swappiness 参数来实现。

如何使用 SWAP?

使用 swap 有两种方式,一种是创建 SWAP 分区即交换分区,另一种是使用 swap 文件。

以前有一种说法是 swap 分区比 swap 文件在速度上要快一些,但是在 linux 内核 2.6.x 及以后版本,这两种方法在性能和速度上其实很接近了,特别是 swap 文件是连续存放在硬盘里的情况下。而且 swap 文件比 swap 分区更灵活,可以放在硬盘的任何目录下,并且随时调整大小。基于这两种不同方式各自的优缺点,你可以根据实际情况选择使用哪种方式。

1、可以使用 swap -s 命令查看 swap 设置的情况。

  1. daweibro@aliyun:~$ swapon -s
  2. Filename               Type        Size    Used    Priority
  3. /var/swap              file        2097148    0    -1

上面是大伟哥阿里云 ECS 的情况,说明 swap 是文件的形式,大小是 2 GB 左右,文件位于/var/目录下面。

  1. daweibro@Workstation:~$ swapon -s
  2. Filename                Type        Size    Used    Priority
  3. /dev/dm-2               partition   3999740    0    -1

上面是大伟哥工作用电脑的情况,这里 swap 是独立分区的形式,大小 4GB 左右。

2、使用 top 或者 free -m 命令可以查看当前内存和 swap 具体的使用情况。这里我们以 free -m 为例:

  1. daweibro@aliyun:~$ free -m
  2.              total       used       free     shared    buffers     cached
  3. Mem:           992        875        116         65        101        370
  4. -/+ buffers/cache:        404        588
  5. Swap:         2047          0       2047

以上 Mem 部分第一二行是物理内存的使用情况 ,最后一行就是 swap 的使用情况了。完全没用到,说明目前阿里云的 ECS 很悠闲,一点也不累。

  1. daweibro@Workstation:~$ free -m
  2.               total        used        free      shared  buff/cache   available
  3. Mem:          19954       10761        6701         416        2492        8327
  4. Swap:          3905           0        3905

工作用的电脑也还行,内存占用率更低,交换分区也没用上。

3、创建 swap 分区或者 swap 文件。

创建 swap 分区要用到分区工具比如 fdisk 或者 parted,这里大伟哥就不讲了,只是提醒一下,磁盘操作需要小心谨慎,万一丢失数据就不好了。

要创建 swap 文件,可以用 dd 命令,下面的例子就是在/根目录下创建一个 2048 GB 大小的文件,名称是 swapfile:

  1. dd if=/dev/zero of=/swapfile bs=1M count=2048

给予合适的权限:

  1. chmod 600 /swapfile

4、建立 swap 的文件系统:

  1. mkswap /swapfile

如果你创建的是 swap 分区/dev/sdb,则需要用同样的命令对 swap 分区进行格式化:

  1. mkswap /dev/sdb

5、建立 swap 的文件系统:

  1. swapon /swapfile

或者:

  1. swapon /dev/sdb

6、编辑/etc/fstab 文件,在文件末尾根据情况加入下面这两行中的一行,然后保存退出,再重启系统运行 swapon -s 或者 top/free 命令应该就能看到新添加的 swap 交换区了。

  1. /swapfile none swap defaults 0 0

或者:

  1. /dev/sdb none swap defaults 0 0

7、如果你做了一个艰难的决定,要和之前的 swap 交换区说再见,只要反方向操作就可以了。首先 swapoff,然后删除 swap 文件或分区:

  1. # swapoff -a
  2. # rm -f /swapfile

最后把之前加入/etc/fstab 文件的行删除就好了。

如何使用 swappiness 参数设置用好 SWAP

论坛上的朋友因为担心 swap 的使用会拖慢系统,所以才发贴寻求删除 swap 交换分区的方法,其实不用过分担心这一点,因为 linux 肯定不会那么傻,放着大量空闲的物理内存不用而去使用慢得多的 swap。就如大伟哥前面的例子,不管是 1 GB 内存的阿里云 ECS 服务器,还是 20 GB 内存的工作站,在物流内存还有富余的情况下,linux 默认是用不到 swap 分区的。如果到了大量使用 swap 分区的时候,那物理内存肯定是不够用了,这时候没有 swap 分区反而性能下降会更明显。所以没有太大的必要去删除 swap 分区。

何况我们还有一个很有用的参数 swappiness 可以调整。swappiness=0 的时候表示最大限度使用物理内存,swappiness=100 的时候表示积极的使用 swap 分区,并且把内存上的数据及时的搬运到 swap 空间里面。当然参数为 0 的时候并不是说要等物理内存完全用光以后才开始用 swap 的,网络上有关于这个参数的算法说明,感兴趣的话可以自己去搜索,大伟哥这里知其然不知其所以然,就不在这里装逼了。

一般 linux 默认的 swappiness 参数是 60。你可以试着调小一些,比如说设置成 10。以下是几个有关 swappiness 操作的命令说明:

1、查看你的系统里面的 swappiness

  1. cat /proc/sys/vm/swappiness

2、修改 swappiness 值为 10:

  1. $ sudo sysctl vm.swappiness=10

上面这条命令只是临时性的修改,重启系统后会恢复成默认的 60,如果需要永久性的设置,可以修改/etc/sysctl.conf 文件,在这个文档的最后加上下面这样一行代码然后保存:

  1. vm.swappiness=10

历史上的今天:

文章标签: ,   ,   ,  
原文地址:https://www.daweibro.com/node/206
温馨提示:文章内容仅代表作者个人观点,不代表boke112导航赞同其观点和对其真实性负责!
版权声明:本文为投稿文章,感谢 大伟哥博客 的投稿,版权归原作者所有,欢迎分享本文,转载请保留出处!
大伟哥博客

相关文章 分类热门分类热评最新问答

 发表评论

中国赞表情摊手表情吃瓜表情笑哭表情偷笑表情衰表情汗表情思考表情费解表情抓狂表情晕表情流泪表情疑问表情嘻嘻表情吃惊表情鼓掌表情

  1. 乘月网
    乘月网 @回复

    SWAP适合于内存吃紧,尤其是危及到数据库,apache,nginx等服务的运行情况下使用SWAP分区是有必要,能应对成本的话,建议加内存。如果本篇遇到什么不懂的,也可以参考《乘月网,icheny.cn》的关于swap分区的文章。

  2. 历史趣谈
    历史趣谈 @回复

    我用windows主机

  3. 宋子宪博客
    宋子宪博客 @回复

    不错的文章,支持一下!

  4. 在线读书
    在线读书 @回复

    swap,虚拟内存总比没有好

  5. 阁楼网
    阁楼网 @回复

    懵比的进,懵比的出 [晕]

  6. iGuanren
    iGuanren @回复

    我记得有个程序叫SWAP ,好像是出售主机空间的系统

  7. 千眼网
    千眼网 @回复

    长见识了。

  8. 清秋暖冬
    清秋暖冬 @回复

    Swap原来是这个啊

  9. 学习笔记Blog
    学习笔记Blog @回复

    不错,真心赞一个!好文章! [嘻嘻]

  10. 明月登楼
    明月登楼 @回复

    不错,很有深度的文章,细节讲的很到位!其实,很多站长都说不清楚 Linux 的内存机制!

  11. 云顶天的世界
    云顶天的世界 @回复

    小内存的虚拟机很有必要~

  12. 天赋网
    天赋网 @回复

    吃瓜群众开始吃瓜

  13. 银色月航
    银色月航 @回复

    想想磁盘操作,还是算了吧,小白路过

  14. 闲鱼
    闲鱼 @回复

    学习姿势,为以后开车做准备 [哈哈]

  15. 小白蜀黍网赚
    小白蜀黍网赚 @回复

    不知道是啥,来学习了

  16. 薅羊毛
    薅羊毛 @回复

    看不懂 一直默认用的一键安装包

  17. 里维斯社
    里维斯社 @回复

    吃瓜群众开始吃瓜

  18. 明月清风
    明月清风 @回复

    请问swap是就是一种分给系统使用,保证其他运作所需的分区吗?是这个意思吗?