如何防止我的系统在发生故障(内存不足)时变得无响应?

如何防止我的系统在发生故障(内存不足)时变得无响应?

我有 8GB 的​​ RAM,但有时我会运行几个虚拟机和足够多的 Chrome 进程,从而占用大部分内存。这通常没什么问题,但有时我的系统会开始不稳定,而且我很难从中恢复,除非等待情况好转,因为 UI 大部分时间都处于冻结状态。

在所有这些情况下,占用我大部分内存的程序可能会被降级。如果 Chrome 或虚拟机没有响应,但我的图形环境和终端仍然有响应,我可以切换到终端,找到罪魁祸首,然后将其关闭。我可以想象一些类似“nice”的内存(这样我就可以 nice Chrome 和我的虚拟机)或强制图形环境和我的终端留在内存中而不是交换的东西。

有没有办法确保当我的系统不稳定时 UI 仍然能够响应?

谢谢!

编辑:我仍然对是否有类似适合内存的东西感兴趣,但我刚刚发现我的系统没有任何交换空间。我认为这是因为我开始使用加密主目录和加密交换(请参阅使用加密主目录的全新 14.04 安装中交换不起作用)。因此,我的系统可能变得无响应,因为我没有任何交换空间,所以当内存不足时,我的系统无法换出不必要的程序。

答案1

我刚刚发现我的系统没有任何交换空间

如果这是真的,那么它很可能就是问题的一个原因。

通过使用具有大内存分配的多个虚拟机,通常足以满足正常使用的 RAM 量(8GB)开始变得紧张,这意味着您的系统将无法使用那么多缓存,并且需要交换。现在,如果您没有交换,内存压力会更大,甚至可能由于内存不足而终止任务。

交换试图在您所描述的情况下提高整体稳定性和性能,方法是将内存中已分配但很少使用的数据重新分配到磁盘,释放内存以用于您正在使用的数据。如果您确实没有交换,添加交换会有所帮助。但是,从性能方面来看,如果您还购买更多 RAM 或使用更少的 RAM,您将获得更大的改进。

在运行虚拟机的系统上,但你在 VM 主机上使用常规桌面,您不希望 VM 占用所有 RAM,实际上,我会为主机保留一半的 RAM(最多 4GB),因为您在主机上运行软件并希望它能够响应。

还要注意的是,虚拟机本身效率低下,这不仅是因为它们的 RAM 完全独立,不共享任何缓存或缓冲区,而且它们在多个抽象层下运行一个完全独立的操作系统。因此,如果您决定在主机而不是虚拟机上运行某些东西,您总是可以获得更好的效率 - 但如果您使用虚拟机的目的是使用其他操作系统,这是不可能的。

有没有办法确保当我的系统不稳定时 UI 仍然能够响应?

当您的 RAM 数量成为问题时,您所能做的任何事情都只是一种破解 - 真正的解决方案是购买更多的 RAM(尽管在您的情况下,正如我所提到的,您可能只需为虚拟机分配更少的 RAM)。

你的问题很简单——你希望即使 IO 拥堵,UI 也能继续顺利运行。然而,这个问题很难回答。你的系统将已经尽其所能做到最好:不需要磁盘访问的操作不会被延迟。如果您的“UI 卡顿”,那是因为负责该 UI 的特定进程需要磁盘访问。在内存不足且磁盘不稳定的情况下,即使是一些通常微不足道的事情(例如从主目录中读取一些配置以找出您的显示首选项)也会因磁盘缓存耗尽而变慢。

我可以想象一些类似于“nice”的内存(这样我就可以让 Chrome 和我的 VM 变得更好)

实际上没有“内存友好”的说法。内存访问速度非常快,通常可以忽略它。当出现抖动时,问题不是出在内存上,而是磁盘。因此,存在“ionice”的说法。不过,这可能不是我针对您的问题所推荐的。

另一个与“适合内存”大致相当的是交换 - 您无法单独控制每个进程的交换程度,但系统可以很好地确定您正在使用哪些进程,因此优先将它们保存在 RAM 中。

但正如我所说,并且作为一条黄金法则,如果您的 RAM 不足,那么购买更多 RAM 是麻烦和缺点最少的解决方案。

相关内容