【IT工程师小贴士】你真的了解内存交换吗?

SWAP是什么?

大家好,
我是Nomusin,自称是公司里最大的硬件极客。

你听说过“内存交换”这个词吗?如今的电脑性能越来越强大,内存也越来越充足,所以你在使用普通电脑时可能根本不会想到它。

我们公司的一项服务器监控服务涉及交换空间监控,当交换空间消耗增加时,就会发出警报。

SWAP是邪恶的!SWAP必须消失!

我相信肯定也有一些成员和我有同样的想法。……咦?难道真的没有吗?

然而,令人惊讶的是,很少有人真正了解 SWAP 的工作原理以及这种机制的必要性。
因此,这次我将简要解释 SWAP 的逻辑、监控的必要性以及如果没有 SWAP 会发生什么。请注意
,本文不涉及具体的 SWAP 设置。

计算机(PC、服务器)的结构 * 非常粗略

简单来说,计算机由三个主要部分组成:
CPU
、内存(DRAM)
[主内存设备] 、存储(SSD、HDD 等) [辅助内存设备]。

如您所知,CPU是计算机的大脑,负责控制计算。
内存是CPU输入用于计算的数据的临时存储位置,而存储器则是数据永久保存的位置(DRAM在断电时会丢失存储的数据)。

需要注意的是,CPU 不能直接访问存储设备(辅助存储设备)
有些人可能会想:“我写的程序不是可以从磁盘读取文件吗!”,但实际上,存储设备上的文件会先加载到内存中,然后 CPU 才会对其进行处理。


内存和存储设备之间的另一个是“速度”。
我相信很多人都有过这样的经历:从机械硬盘 (HDD) 换成固态硬盘 (SSD) 后,电脑运行速度的提升让他们惊喜不已。(如今,配备机械硬盘的电脑越来越少见了……)

这毫不奇怪。固态硬盘 (SSD) 的速度远超机械硬盘 (HDD)。
那么,内存(DRAM)与 SSD 相比如何呢?
DRAM 的速度也远超 SSD,快一个数量级。
速度的衡量标准有很多,例如访问时间和传输速度,但 DRAM 在所有方面都更快。

如果更详细地讲,CPU 配备了多层高速缓存(SRAM),其速度比 DRAM 快几个数量级,但这超出了本主题的范围,所以我们暂时先不谈。

关于主要话题,交换

你是否理解了计算机的一般结构?
现在,让我们进入正题:交换。

你知道“SWAP”这个词的意思吗?
我问谷歌,它给出的解释是
“交换”或“替换”。那么,当发生SWAP时,是不是意味着用一样东西交换另一样东西呢?

首先,什么是交换区?
简单来说,在存储设备上创建的“虚拟内存区域”
虽然它是“虚拟内存区域”,但由于它是在存储设备上创建的,因此访问数据的速度与访问存储设备的速度相同,但“比访问内存慢得多”。

此外,由于此交换区域专用于数据交换,其他操作无法向该区域写入文件。因此,例如,如果您分配 1 GB 的交换区域,目标存储上的可用空间将减少 1 GB。

那么,交换区(SWAP)何时使用呢?
当内存不足时就会用到它。
情况发生在多个程序同时运行时,或者某个程序占用大量内存,导致内存无法存储运行所有程序所需的数据时……内存溢出!

如上所述,CPU 无法直接访问存储器(辅助存储器) ,因此程序运行所需的所有数据都必须存储在内存中。如果内存溢出,程序将无法正常运行,并会因内存不足而发生错误。

但是,如果启用了交换空间并且有足够的交换空间(足够大,可以存储从内存溢出的数据),那么它就可以工作。

诀窍在于:
1)为了让CPU获取所需数据,它首先将内存中不常用的数据写入交换区(存储空间);2)然后,
由于步骤1)而释放出来的内存区域再从存储空间
读取
在内存和存储空间之间进行交换交换!

这样一来,计算机就能像拥有更多内存一样运行。

当然,凡事有利有弊。
正如我之前多次提到的,存储速度很慢。如果每次内存不足时都必须频繁地读写数据,处理速度自然会下降。磁盘 I/O 也会增加。
最终,你会遇到
“虽然能运行,但体验并不流畅……”。不过,这总比因为错误而导致程序停止运行要好得多。

这就是为什么发生交换操作时系统运行速度会变慢的原因。
因此,你不应该忽视交换操作,它其实是一个很有用的功能,可以让一些没有交换操作就无法实现的功能得以运行。

是的, 我母亲管理我们有限的家庭预算的一种方式……!

*顺便一提,以上解释是针对 Linux 的,但 Windows 也有类似于交换空间(SWAP)的东西,叫做
“虚拟内存”。 ↓就是这样。

默认情况下,Windows 会根据已安装的内存大小计算推荐值并自动分配。

结论

结论如下:

  • 如果频繁发生交换操作,系统运行速度会变得非常慢。
  • 但是,如果不设置 SWAP,则可能会出现因内存不足而无法启动程序的情况。
  • 如果 Linux 运行所需的内存不足,则可能会发生 OOM Killer 事件。

考虑到以上因素,

  • 您需要根据系统的内存消耗情况,为交换空间设置合适的大小。
  • 不断消耗交换空间的系统首先应该考虑扩大内存容量。
  • 如果 SWAP 消耗持续无限增长,则可能是由于程序故障(例如内存泄漏)或设置不当造成的,因此需要进行调查。


为了构建稳定的系统,请确保正确设置 SWAP !

最后

这里是 SEKARAKU 实验室,我所在的系统开发服务公司。

SEKARAKU 实验室: https://sekarakulab.beyondjapan.com

Beyond 可以处理从服务器设计和构建到运营的一切事宜,因此如果您在服务器端开发方面遇到任何问题,请随时与我们联系。

感谢您阅读到最后。
近年来,随着硬件性能的提升和软件中高效内存管理机制的引入,我们或许不再需要关注交换空间(SWAP)。
然而,它仍然是当今所有操作系统都包含的一项重要功能。
本文仅提供简要介绍,如果您感兴趣,欢迎深入研究。

※更多关于SWAP的文章请点击此处查看。

【波斯猫备忘录】我试用了AWS免费套餐!正在添加交换空间

如果您觉得这篇文章有用,请点击【点赞】!
57
加载中...
57票,平均分:1.00/157
101,868
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

野村由纪

大学毕业后,他曾在一家本地系统开发公司从事电子病历开发工作。
之后,他跳槽到一家移动应用开发公司,积累了功能手机和智能手机应用开发经验,并于2013年加入Beyond公司。他在大阪办公室工作,
目前主要负责Web系统的设计和开发。
业余时间,他仍然会继续开发智能手机应用。
他是一位硬件极客和机械师。电脑和自行车的组装就交给我们吧!