我的 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 秒,而不是几分钟(或永久),并且应该几乎没有磁盘抖动。