当所有 RAM 都用完了并且没有交换时,Ubuntu 会做什么?

当所有 RAM 都用完了并且没有交换时,Ubuntu 会做什么?

假设我关闭交换,所有 RAM 都用完了。会发生什么?

机器会死机吗?Ubuntu(或者Linux内核)会智能关闭占用过多内存的程序吗?

背景:我有一台 3 GB RAM 的旧台式机,可与 Xubuntu 20.04 顺利配合使用。当我同时打开 Firefox 中的多个选项卡和一些大型 PDF 文件时,大约会使用 2.4-2.5 GB 的 RAM,并使用大约 700-800 MB 的交换空间。但是,桌面界面的响应速度有点慢,有时在加载 RAM -> 交换时会变得无响应。

当我关闭其中一些软件并运行命令时,它再次变得响应sudo swapoff -a && sudo swapon -a,以便交换的内容重新加载到 RAM 中。

我发现在打开此类程序之前关闭交换时系统响应不会变慢(我很小心不要消耗所有 RAM)。

我想知道如果我永久关闭交换并且所有 RAM 都用完了,是否会出现任何严重问题。当然,我会尽量确保不会发生这种情况。但是,我更愿意使用更快的系统(同时注意不要同时打开太多程序),而不是使用具有更大有效内存(物理 RAM + 交换)的较慢系统。

答案1

Ubuntu 20.04 终止一个进程。

我在一台新的 GCE 20.04 服务器上亲眼看到了这一点:我收到通知,我们的一个实例出现故障,在我登录之前,Ubuntu 已经杀死了 9 个 MySQL 进程中的一个。经过一番调查,正是这个进程消耗了服务器 70% 以上的内存。

这将为您提供有关“杀死进程”的信息:

journalctl -a | grep -i "killed process"

dmesgsyslog会显示来自oom-kill

kernel: [{timestamp}] Out of memory: Killed process {id} ({name}) {process information} oom_score_adj:{number}

在 18.04 或更早的版本中我没有看到这种情况发生。服务器会一直很慢,直到我自己杀死一个进程。这适用于进程,而不是休眠/挂起时:这将需要交换,如果没有休眠/挂起将不起作用


故事内存不足杀手

每当您的服务器/进程内存不足时,Linux 都有两种处理方式,第一种是操作系统 (Linux) 崩溃,整个系统瘫痪,第二种是终止进程(应用程序),导致系统内存耗尽。第二种选择的最佳选择是终止进程并防止操作系统崩溃。简而言之,内存不足终止程序是负责终止应用程序以防止内核崩溃的进程,因为它只会终止应用程序并防止整个操作系统崩溃。让我们首先讨论 OOM 的工作原理以及如何控制它,然后我们将讨论 OOM 终止程序如何决定终止哪个应用程序。

个人评论:“因为它只会终止应用程序”可能是错误的。我注意到它终止了一个进程,但没有重新启动 mysql 服务。

相关内容