周五看到QQ群里在讨论Linux主机上到底需不需要开启swap空间,而且目前公有云主机默认都是把swap关了的,很多公司也是没有开启swap,那到底需不需要开启呢?


我之前在看《鸟哥的Linux私房菜》上他写了这么一段话:swap在目前的桌面计算机来讲,存在的意义已经不大了,这是因为目前的X86主机所含的内存实在都太大了,所以我们的系统大概率用不到swap,不过,如果针对服务器或者工作站这些常年上线的系统来说,swap还是需要的。


当然,这段话是《鸟哥的Linux私房菜》第三版里写的(在第四版不知道还是不是这么写的),那时候的内存还远远没有现在大,那现在到底需不需要呢?我们先来看看什么是swap,它的作用是什么。

什么是swap

swap是磁盘上的一个区域,可以是一个分区,也可以是一个文件,或者是它们的组合,简单点说,当系统物理内存不够时,Linux会将内存中不常访问的数据保存到swap上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问swap上存储的内容时,再将swap上的数据加载到内存中,这就是我们常说的swap out和swap in。

swap的主要功能

其实上面基本已经将swap的主要功能说了,这里再来重述一下:
(1)、当物理内存不足的时候,将某些在内存中所占用的程序暂时移动到swap当中,让物理内存可以被需要的程序来使用;
(2)、Linux会将内存中不常访问的数据保存到swap中,当系统需要再次调用的时候,就把它从swap加载到内存;
(3)、如果你的主机支持电源管理模式,也就是说,你的Linux主机系统可以进入"休眠"模式的话,那么,运行当中的程序状态则会被记录到swap中去,以作为"唤醒"主机状态的依据;
(4)、在某些程序运行时,本来就会利用swap特性来存放一些数据,比如在装Oracle11g的时候会检查swap size;

swap给我们带来什么好处

上面介绍了swap的主要功能,其实就是swap的优点。在说swap给我们带来好处之前先说说swap的缺点。由于swap是磁盘上的一个区域,要么是文件,要么是分区,甚至它们的组合,其实都逃不脱"在磁盘上",那么很明显的一个缺点就是速度,磁盘的速度和内存的速度不是一个量级的,就算现在的SSD磁盘,还是跟不上内存的速度,所以说如果不停的读写swap,对磁盘的性能是有很大的影响的,尤其是在物理内存吃紧,swap读写频率又高的极端情况下,这时候除了加物理内存别无他法了。

有的小伙伴看到这里可能在想,哇,我还用它干啥,我直接把我内存加够不就行了。骚年莫急,我将慢慢道来。
来看看下面这些情况:
(1)、有些应用程序在启动的时候会需要大量内存,但是在启动完成后需要的内存很小,这时候swap就很是时候了,假如全部用物理内存,其实就有点浪费资源了,谁的钱不是钱呢?你说是吧。
(2)、现在很多小伙伴开发都用Ubuntu,Ubuntu有休眠的功能,如果需要用到休眠的话,也是需要swap的,它会把休眠之前内存中的数据保存到swap中,你下次用的时候,就直接从swap加载到内存中,省的麻烦。
(3)、有些小公司讲究节约成本,甚至有的把这个当成kpi了,所以就不能把内存搞得蛮大了,我们就需要在保证系统正常运行所需内存的情况下,配备swap,既可以保证业务运行,也可以防患于未然。
(4)、现在大部分物理内存都够用了,很多公司也完全放弃了swap。但是谁也不知道下一秒会发生什么问题,比如内存泄漏,比如某个进程需要内存超过预期,这时候如果只有物理内存,可能就会直接OOM了,等不到我们收到报警,进行处理。如果这时候有swap,我们收到物理内存不够报警的时候还会有swap顶一下,回滚或者加内存什么的也有足够的时间,避免手忙脚乱发生生产事故。

当然还有很多情况,这里就不例举了。从上面其实可以看出,swap有它的好处,也有它的缺点,具体用不用是根据每个公司具体情况来定的,不是说不用,也不是说一定要用(当然,有的软件是一定要用的)。就像今天上午在微信群里和一为小伙伴讨论要不要秒级报警一样,每个公司有每个公司的打法,在讨论问题的时候切莫以自己公司的就是标准,我一直认为互联网时代没有唯一的标准,只有不断探索,不断追求,当然,大部分公司基本都是采用"前车之鉴"这种模式,比如效仿BAT公司成熟方案,学习各大高科技公司的落地实施等。

说了这么多,其实也就几句话:swap空间到底用不用,取决于应用软件需不需要,取决于公司的规范标准,还却决于作为运维人员自己的考虑,更多情况下还却决于现实(你的公司舍不舍得花钱)。

Linux下swap到底有没有必要使用的更多相关文章

  1. Linux 下 swap 分区及作用详解

    我们在安装系统的时候已经建立了 swap 分区.swap 分区是 Linux 系统的交换分区,当内存不够用的时候,我们使用 swap 分区存放内存中暂时不用的数据.也就是说,当内存不够用时,我们使用 ...

  2. Linux下swap(交换分区)的增删改

    swap介绍 Linux 的交换分区(swap),或者叫内存置换空间(swap space),是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合.交换分区的作用是,当系统物理内存吃 ...

  3. Linux下JDK到底应该安装在哪儿?

    1 Linux 目录结构 即使这是个菜鸟级的问题,也经常难住老鸟.我就见过很资深的程序员把JDK不合适地安装到/home目录下.虽然不一定有最正确的安装位置,但一定有不适当的安装位置.为了确定我们到底 ...

  4. Linux下swap分区多大才合适的问题探讨

    说明: 1.这个话题在每个Linux发行版中都各不相同,且在当下内存硬盘的时代下,再组个磁盘阵列之后速度相当. 2.我觉得硬盘大的情况下,有多大搞多大,我只要控制内存的使用率在99%时才使用swap, ...

  5. linux增加swap空间的方法小结

    起因及背景 近期编译AOSP(android 10.0)是总是遇到内存溢出,查了半天,无果.猜测增加下swap空间大小是否能解决,随即尝试下,果然是如此. 当然,还有其他作法,比如直接增加主机的内存( ...

  6. linux下vi编辑某文件时,操作出现 错误提示: E325: ATTENTION 2, Found a swap file by the name ".p1.c.swp"

    当我在linux下用vi打开p1.c文件时 root@iZ2zeeailqvwws5dcuivdbZ:~/1/01/指针# vi p1.c 会出现如下信息: E325: ATTENTION Found ...

  7. 在linux下,怎么去查看一个运行中的程序, 到底是占用了多少内存

    1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有 (1). ps aux: 其中  VSZ(或VSS)列 表示,程序占用了多少虚拟内存. RSS列 表示, 程序占用了多少物 ...

  8. Linux下修改Swap分区大小

    据了解Linux下可以有两种方法创建交换空间,一种是创建交换分区,另一种是创建交换文件.本文记录的是创建交换文件的方法,因为我用的是这种方法.. 添加交换文件步骤: 1.找个地方创建一个.swap的文 ...

  9. Linux环境下Swap配置方法

    Linux环境下Swap配置方法 场景: 今天下午安装一个CentOS6.5操作系统,忘记配置swap分区.看看如何安装系统之后,增加和删除swap分区.方法如下:1.内存占用情况[root@josh ...

随机推荐

  1. AJ学IOS(50)多线程网络之GCD简单介绍(任务,队列)

    AJ分享,必须精品 GCD简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果 ...

  2. springboot 项目使用阿里云短信服务发送手机验证码

    1.注册阿里云账户进行账号实名认证 2.申请短信签名和模板 3.创建access_key和access_secret 4.然后就是代码编写 一.找到产品与服务里面的云通信模块,然后找到短信服务,开通短 ...

  3. go开发包下载,IDE工具下载,基础配置命令

    目录 go语言介绍 go开发包下载 命令介绍 配置 修改配置 golandIDE工具下载 编译并执行命令 命令 go语言介绍 # 1 诞生于 2009年,10年的时间,非常新的语言,天然支持并发,很新 ...

  4. 上班无聊,自己用python做个小游戏来打发时间

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取t.cn ...

  5. G - Pairs Forming LCM LightOJ - 1236 (质因子分解)

    题解:这道题要从n的角度来考虑i和j. n可以表示为n=a1^p1*a2^p2*a3^p3.......n=lcm(i,j),那么质因子a1^p1,a1可以在i或者j中,并且p1=max(a1i,a1 ...

  6. HPU第一次团队赛

    D. Tom的战力问题 Tom被斯派克揍了TAT.Tom下定决心要战胜斯派克.但是在战胜最强的斯派克之前,Tom要先打败其他的狗.为此,他打算先收集一下信息.现在Tom在了得到了一些关于战斗力的小道消 ...

  7. 掷骰子 dp

    B. 掷骰子 单点时限: 2.0 sec 内存限制: 512 MB 骰子,中国传统民间娱乐用来投掷的博具,早在战国时期就已经被发明. 现在给你 n 个骰子,求 n 个骰子掷出点数之和为 a 的概率是多 ...

  8. Gatling脚本编写技巧篇(一)

    一.公共类抽取 熟悉Gatling的同学都知道Gatling脚本的同学都知道,Gatling的脚本包含三大部分: http head配置 Scenario 执行细节 setUp 组装 那么针对三部分我 ...

  9. [yii2] 实现所有action方法之前执行一段代码或者方法

    我做的是在执行任何方法之前,验证用户登陆状态! 其实就是在controller中写beforeaction()方法, 然后我的方案就是做一个基类,然后让你所有控制器继承你的基类, 如果控制器的基类用_ ...

  10. 通过注册表查询 .Net Framework 的版本

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full 注意:即使卸载 .Net Framework 这些注册表依然 ...