内存不足时 Ubuntu 冻结

use*_*373 8 swap freeze ram

我的 ubuntu 服务器运行了一个月没有任何问题。但上周我开始使用需要更多内存的程序。当空闲内存在 100MB 左右时,系统完全冻结。我无法输入任何内容,移动光标,从腻子连接.. 什么也没有.. 但奇怪的是,硬盘仍在工作(正在闪烁).. 我可以完全重现这个问题,几乎每次有空闲内存时都会发生100MB。但是我有交换文件,并且在这个交换文件中有足够的可用空间。这是我在冻结前 1 秒的内存状态。

    每 1.0 秒免费 -mh Mon Mar 19 17:05:33 2018                                     

               可用的免费共享 buff/缓存总数
内存:11G 10G 115M 1.2G 1.5G 115M
交换:7.9G 2.4G 5.5G

这是我的 linux 内核

Linux xxx 4.15.1-041501-generic #201802031831 SMP 周六 2 月 3 日 18:32:13 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

这是我的 ubuntu 版本

没有可用的 LSB 模块。
分销商 ID: Ubuntu
描述:Ubuntu 17.10
版本:17.10
代号:巧夺天工

这是我的 swappines、overcommit_memory 和 overcommit_ratio 配置

vm.swappiness = 60
vm.overcommit_memory = 0
vm.overcommit_ratio = 50

这是我的硬件配置

主板:PRIME B350-PLUS
CPU : AMD Ryzen 7 1700 八核处理器
内存:4GB + 8GB DDR4
硬盘:三星 960 evo 250GB

当然,我可以将内存升级到 16GB,但我仍然希望我的系统稳定。有谁知道什么可能是错的?

小智 1

我相信这与这个问题是同一个问题,即使您启用了交换: https: //unix.stackexchange.com/q/373312/306023

基本上,内核(或 kswapd0)正在逐出每个活动进程的代码(可执行)页面,以释放更多 RAM,因此,当进程恢复执行时,每次上下文切换时,都需要将其从磁盘重新读入内存,然后才能它恢复执行。

这种情况每秒需要发生很多次,再加上磁盘比 RAM 慢得多,因此操作系统实际上被视为冻结。就好像 RAM 暂时被磁盘取代一样,所有这一切都是因为内核犯了错误,驱逐了正在运行的进程的文件支持的可执行页面,而不仅仅是不活动的页面。

如果您想尝试看看如果内核不逐出这些内容会发生什么,您可以使用此补丁重新编译内核,如问题所示。应该发生的情况是,操作系统现在应该冻结最多 1 秒,而不是几分钟(或永久),并且应该几乎没有磁盘抖动。