即使没有配置交换,Ubuntu 也会交换吗?

Rom*_*kiy 3 swap

在我/etc/fstab的没有swap分区。

top 显示 KiB Swap: 0 total, 0 free, 0 used

swapon没有显示任何内容。

所以看起来交换被禁用了。但是当系统用完物理内存时,它开始表现得好像在交换:系统几乎没有响应,磁盘访问指示灯一直亮着;如果我设法关闭一个繁重的进程(或者如果它被杀死,可能是被内存不足的杀手杀死),系统会再次响应。

在这种情况下,Ubuntu 还会交换吗?

系统是 Ubuntu 16.04。

Fab*_*bby 8

简短的回答:

如果没有交换,Ubuntu 将不会交换。

长答案:

发生的情况是 Linux 内核内存管理器(不是真正的 Ubuntu 本身)将首先尝试将内存整合成块,它可以分配给请求所述内存的应用程序(您看到的速度变慢),如果不能,这些应用程序将崩溃,从而为没有崩溃的行为更良好的应用程序释放内存。

内核的 OOM Killer ¹仅在没有其他方法时才会调用²并且查看您的高磁盘使用率,您遇到了内存分配规则太小而无法失败的情况。相关部分指出:

换句话说,分配过程无法继续,因为它正在等待其分配调用返回。在释放内存之前,该调用无法返回,这需要受害进程退出。OOM 杀手也会在(可能)选择第二个进程杀死之前等待受害者退出。

咆哮:

当我还是个孩子的时候,进入 IT 行业所需唯一资格是阅读手册的能力,32K 是常态,64K 是“哇”,我们过去常常检查每个内存分配并显示“内存不足”当我们不能在应用层面,今日的分配内存的孩子程序员没有做任何更多,他们正在与多台监视器,巨大的固态硬盘和系统通常更好腐烂变质比系统软件的实际运行上他们是不再习惯让系统耗尽内存......

;-)