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

大家好,
我是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 的其他文章。点击此处
58
