我的 Debian Stretch 系统有大量 RAM。目前,它在 SSD 上使用加密交换分区,但在正常情况下,我不认为内存不足会导致它被使用。
但根据 Snakedoc 的评论,完全关闭交换是一个坏主意:
请注意,完全禁用交换永远不会“安全”。即使对于具有 96+ GB RAM 的系统,运行至少 512MB 的交换也是一个很好的安全措施。如果某些东西运行失常并意外耗尽所有内存,它会给您的系统时间来杀死不必要的进程...禁用交换的替代方案是内核恐慌。
所以我想我可以保留一些内存,比如 0.5G 作为“RAM 磁盘”,并将其用作交换文件,将写入保存到 SSD。
我怎么做?由于某种原因这是一个坏主意吗?
答案1
我不会说其原因是稳定性,这是一个常见的误解。如果系统内存+交换空间已满,您会发现实际上与没有交换空间相同的症状:
- 无法解释,大的速度变慢(系统会锁定需要内存的进程一段时间,也许有人会释放它们所需的内存)
- 被 OOM(内存不足)杀手终止的进程。
唯一的区别是没有交换,这些症状就会发生突然,而对于交换,它们仅在交换被填写后发生。因此,在系统开始完全无响应之前,您有更长的延迟时间。
这是第一个原因,为什么交换是有用的。
第二个不太为人所知,但实际上更重要:
一般来说,使用交换不会减慢你的机器速度,反而会加速它,即使你的内存远远不够。
其原因如下:您的系统中的 RAM 实际上没有被您的进程使用吗?它们用于缓存您的硬盘,使您的系统速度更快。
如果你有交换,你实际上允许你的系统交换出很少的内存页面,并将它们的空间用于磁盘缓存。它们发生的速度有多快,这取决于您的虚拟机设置和启发式方法,但它们确实很好(据我所知,从这个意义上来说,linux 是最好的)。
如果您的硬盘位于 SSD 上,并不会真正影响这两个参数(尽管拥有更快且零寻道时间的磁盘当然可以加速一切)。
我主要使用旧的交换分区黄金法则:我使用 2 倍以上的交换空间作为 RAM。这是为了避免交换碎片(交换文件上的块可以像文件系统上的文件一样碎片化)。在您的情况下,如果您拥有大量 RAM,但具有零寻道时间的昂贵硬盘,则交换碎片不是问题,因此也许更少就足够了。我不知道,你有多少个SSD,也许你的RAM站点的1倍甚至0.5倍就足够了。
在我看来,这个“至少有 512M 交换空间”的建议是不好的,你使用的交换空间数量必须取决于你的系统参数(磁盘成本、RAM 数量、磁盘数量、硬盘寻道时间等)。这个512M不是一个“黄金法则”,它是一个“魔数”,如果我们一般使用它是没有意义的。
答案2
在 SSD 系统上使用 HDD 进行交换并不是一个好主意。与现代 SSD 相比,它不仅速度较慢,而且访问时间更长、耗电更多,而且可能可靠性较差。现在的SSD有5年质保,即使每天写入数百GB也能轻松使用8-10年
但最好是使用zram
,可能还有 SSD 上的一个小型备份交换分区。各种 Linux 发行版以及 ChromeOS 和 Android 多年来都默认启用 zram。 Android 上甚至没有默认的传统交换功能。甚至视窗和苹果系统现在在求助于交换之前使用压缩RAM
由于CPU解压缩数据的速度比HDD快得多,因此一旦系统开始交换,您就可以清楚地感受到系统的响应速度。差异并不是 SSD 固有的,而是根据基准测试结果在这里使用默认 lzo 算法的 zram 看起来仍然更快。您可以轻松更改为lz4算法这是比 lzo 快近 5 倍压缩比稍低
还有zswap
它使用不同的机制,但仍然将压缩数据存储在 RAM 上
进一步阅读
答案3
根据 @peterh 的回答,一个好的解决方案可能是将任何旧 HDD 插入计算机中并将其用作暂存空间,包括交换空间。这样所有的内存都可以用于系统,甚至是最后的 0.5G。笔记本电脑 HDD 可能比 3.5 英寸驱动器更节能。