在我的 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 需要虚拟机中的交换空间?了解详情。
值得注意的是,如果禁用交换,内核将无法换出。它所能做的就是使用映射文件作为后备存储,但这通常不涉及写入(特别是对于可执行文件和库)。如果您看到压力下的写入,可能是因为内核正在刷新脏页(主要是其缓冲区)以尝试回收它们。