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

SWAP是什么?

大家好,
我是Nomushin,公司里自称最大的硬件爱好者。

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

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

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

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

然而,令人惊讶的是,很少有人真正了解 SWAP 的工作原理以及这种机制的必要性。
因此,本文将简要解释 SWAP 生成的逻辑、监控的必要性以及缺少监控的后果。请注意
,本文不会涉及具体的 SWAP 配置细节。

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

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

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

这里需要注意的是,“CPU 不能直接访问存储器(辅助存储器)
你可能会想,“但是我的程序是从磁盘读取文件啊!”然而,在这种情况下,该过程首先需要将文件从存储器加载到内存中,然后 CPU 才会对其进行处理。

还有一点。
内存和存储设备最大的区别在于“速度”。
很多人可能都体验过从机械硬盘 (HDD) 换成固态硬盘 (SSD) 后性能的显著提升。(虽然现在使用机械硬盘的电脑已经是少数了……)

这毫不奇怪,固态硬盘 (SSD) 的速度远超机械硬盘 (HDD)。
但如果将内存(DRAM)与 SSD 进行比较呢?
在这种情况下,DRAM 的速度也遥遥领先,差距可达几个数量级。
速度的衡量标准有很多,例如访问时间和传输速度,但在所有方面,DRAM 都更快。

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

关于主要话题,交换

你已经掌握了计算机的基本结构吗?
现在让我们进入正题:交换。

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

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

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

那么,交换空间(SWAP)什么时候会用到呢?
就会用到当内存不足时
例如,当多个程序同时运行时,或者当某个程序占用大量内存时,“运行该程序所需的数据无法存储在内存中……!内存溢出了!!”的情况。就会出现

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

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

该机制的工作原理如下:
1)CPU 将不常用的数据从内存写入交换区(存储空间),以便获取所需数据
)然后,CPU 将数据从存储空间读取到步骤 1)释放出的内存区域

在内存和存储空间之间 交换!本质上,数据

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

当然,凡事有利有弊。
正如我多次提到的,存储速度很慢。当内存耗尽时,频繁地读写数据,处理速度自然会下降。磁盘 I/O 也会增加。
结果就是,“程序能运行,但体验并不流畅……”的情况
。但这总比因为错误而停止运行要好得多。

当发生交换事件时,性能下降的原因正是上述原理所致。
因此,您不应忽略交换事件,而应首先认识到,交换是一个便捷的功能,它可以让原本无法正常运行的功能开始运行。

没错,一位母亲巧妙管理有限家庭预算的智慧之举……!

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

在初始状态下,Windows 会根据已安装内存的大小自动分配推荐量的虚拟内存。

结论

结论如下:

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

考虑到以上因素,

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

以上是我们能提出的一些要点。
为了构建一个稳定的系统,让我们正确配置交换分区!

最后

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

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

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

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

查看有关 SWAP 的其他文章。点击此处

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

如果您觉得这篇文章对您有帮助,请点个“赞”!
58
加载中...
58票,平均分:1.00/158
104,214
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

野村由纪

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