在我/etc/fstab
没有swap
分区。
top
显示KiB Swap: 0 total, 0 free, 0 used
并且swapon
什么也没有显示。
所以看起来交换被禁用了。但是当系统耗尽物理内存时,它开始表现得像是在交换:系统变得几乎没有响应,磁盘访问指示灯一直亮着;如果我设法关闭一个繁重的进程(或者如果它被杀死,可能是被内存不足的杀手杀死),系统会再次响应。
在这种情况下,Ubuntu 还会交换吗?
系统是 Ubuntu 16.04。
简短的回答:
如果没有交换,Ubuntu 将不会交换。
长答案:
发生的情况是 Linux 内核内存管理器(不是真正的 Ubuntu 本身)将首先尝试将内存整合成块,它可以分配给请求所述内存的应用程序(您看到的减速),如果不能,这些应用程序将崩溃,从而为没有崩溃的表现更好的应用程序释放内存。
内核的 OOM Killer ¹仅当且仅当没有其他方法时才会调用²并查看您的高磁盘使用率,您遇到了太小而无法失败的内存分配规则。相关部分指出:
咆哮:
当我还是个孩子的时候,你进入 IT 行业所需
的唯一资格就是阅读手册的能力,32K 是常态,64K 是“哇”,我们曾经检查每个内存分配并显示“内存不足”当我们无法在应用程序级别分配内存时,今天的儿童程序员不再这样做了,因为他们被多个显示器、巨大的 SSD 和通常比他们的软件实际运行的系统更好的系统宠坏了不再习惯让系统内存不足...;-)