假设我关闭了交换,并且所有 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 + 交换)的较慢系统。
Ubuntu 20.04 杀死了一个进程。
我自己在一台新的 GCE 20.04 服务器上注意到了这一点:我收到一个通知,我们的一个实例正在运行,在我登录之前,Ubuntu 已经杀死了 9 个 MySQL 进程之一。经过一番调查,它消耗了服务器70%以上的内存。
这将为您提供有关“杀死进程”的信息:
journalctl -a | grep -i "killed process"
Run Code Online (Sandbox Code Playgroud)
dmesg并且syslog还会显示来自oom-kill
kernel: [{timestamp}] Out of memory: Killed process {id} ({name}) {process information} oom_score_adj:{number}
Run Code Online (Sandbox Code Playgroud)
我在 18.04 或更旧的版本中没有看到这种情况。服务器会一直保持缓慢,直到我自己杀死了一个进程。这适用于进程,而不是在您休眠/挂起时:这将需要交换,如果没有休眠/挂起将不起作用
失忆杀手的故事:
每当您的服务器/进程内存不足时,Linux 有两种方法来处理它,第一种是操作系统(Linux)崩溃并且您的整个系统停机,第二种是杀死使系统运行的进程(应用程序)内存不足。第二种选择的最佳选择是终止进程并避免操作系统崩溃。简而言之,Out-Of-Memory Killer 是负责终止应用程序以防止内核崩溃的进程,因为它只会杀死应用程序并避免整个操作系统崩溃。让我们首先讨论 OOM 和如何工作以及如何控制它,然后我们将讨论 OOM Killer 如何决定要杀死哪个应用程序。
个人评论:“因为它只会杀死应用程序”可能是错误的。我注意到它杀死了一个进程而不是重新启动 mysql 服务。
| 归档时间: |
|
| 查看次数: |
1129 次 |
| 最近记录: |