停用交换区,系统仍然因内存不足而变得非常慢

停用交换区,系统仍然因内存不足而变得非常慢

在我的 Fedora 笔记本电脑上,我已经停用了交换分区,因为它对我来说似乎毫无用处。当开始写入 SSD 时系统将停止。消耗这么多内存的应用程序通常不会停止,所以一旦它们分配,它们就会分配越来越多的内存(gitk 有 1M 行差异,有内存泄漏的错误程序,......)。

我仍然发现当内存耗尽时系统会写入SSD。似乎没有启用交换:

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           7,7G        2,2G        455M        685M        5,1G        4,8G
Swap:            0B          0B          0B

为了让内核终止程序而不是交换到 SSD,我必须启用的设置在哪里?

答案1

我认为您正在寻找/proc/sys/vm/overcommit_memory,您应该将其设置为 2 以强制执行内存分配检查(程序将无法分配比实际可用的内存更多的内存)。您可能也需要进行调整/proc/sys/vm/overcommit_ratio,至少如果您的任何程序需要分配一半以上的已安装内存。联机procfs帮助页记录所有这些。

我建议您重新考虑禁用所有交换的决定;看为什么 Linux 需要虚拟机中的交换空间?了解详情。

值得注意的是,如果禁用交换,内核将无法换出。它所能做的就是使用映射文件作为后备存储,但这通常不涉及写入(特别是对于可执行文件和库)。如果您看到压力下的写入,可能是因为内核正在刷新脏页(主要是其缓冲区)以尝试回收它们。

相关内容