如何防止我的系统在颠簸(内存不足)时变得无响应?

Sam*_*ing 12 swap ram nice 14.04

我有 8GB 的​​内存,但有时我会运行几个虚拟机和足够的 Chrome 进程来使用我的大部分内存。这通常没问题,但有时我的系统开始崩溃,而且我很难在不等待情况好转的情况下从中恢复,因为 UI 大部分时间都被冻结了。

在所有这些情况下,使用我大部分 RAM 的程序可能会被取消优先级。如果 Chrome 或 VM 没有响应,但我的图形环境和终端仍然响应,我可以切换到终端,找到罪魁祸首,然后杀死它。我可以想象像内存的“好”(以便我可以使用 Chrome 和我的 VM)或强制图形环境和我的终端留在内存中而不是交换的东西。

有没有办法确保当我的系统颠簸时 UI 保持响应?

谢谢!

编辑:我仍然对是否有类似记忆的好东西感兴趣,但我刚刚发现我的系统没有任何交换空间。我认为这是因为我开始使用加密的 home 和加密的交换(请参阅Swap not working on clean 14.04 install using encrypted home)。因此,我的系统可能变得没有响应,因为我没有任何交换空间,所以当内存不足时,我的系统无法交换不必要的程序。

tho*_*ter 1

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

如果这是真的,那么它可能是导致问题的原因。

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

交换尝试在您所描述的情况下提高整体稳定性和性能,通过将内存中一些已分配但很少使用的数据重新分配到磁盘,为您正在使用的数据释放内存。添加交换(如果确实没有)会有所帮助。然而,在性能方面,如果您还购买更多 RAM 或使用更少 RAM,您将会获得更大的改进。

在运行虚拟机但还在虚拟机主机上使用常规桌面的系统上,您不希望虚拟机占用所有 RAM,事实上我会节省一半的 RAM(最多 4GB) )对于主机,假设您正在主机上运行软件并希望它能够响应。

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

有没有办法确保当我的系统崩溃时 UI 保持响应?

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

你的问题很简单——你希望UI能够在IO拥塞的情况下继续顺利运行。然而,回答起来很复杂。您的系统已经尽其所能:不需要磁盘访问的操作不会被延迟。如果您的“UI 出现卡顿”,那是因为负责该 UI 的特定进程需要磁盘访问。在内存不足且磁盘抖动的情况下,即使是通常很琐碎的事情(例如从主目录中读取一些配置以了解您的显示首选项)也可能会由于磁盘缓存耗尽而变慢。

我可以想象一些类似“nice”的内存(这样我就可以很好地使用 Chrome 和我的虚拟机)

并不存在真正的“美好记忆”。内存访问速度非常快,您通常可以忽略它。当出现抖动时,问题不是内存,而是磁盘。正因如此,才有了“ionice”。尽管这可能不是我针对您的问题所建议的。

另一个大致相当于“内存好”的是交换 - 您无法单独控制每个进程的交换方式,但系统可以很好地确定您正在积极使用哪些进程,因此具有更高的优先级内存。

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