我如何强制某些程序运行在它们所熟知的一定内存占用范围内?

我如何强制某些程序运行在它们所熟知的一定内存占用范围内?

在我的计算机上(Linux Mint x64,故意将交换空间设为零),Firefox 和 Chrome 等程序(不幸的是,它们同时运行,因为它们需要这样做)最终消耗的内存比它们应消耗的内存多得多。当它们出错时,整个机器就会停止运行。

我如何强制将其中一些任务强制限制在它们完全了解的特定内存占用内,以便它们不会试图超出其最大内存占用?

我已经厌倦了 Chrome 和 Firefox 之类的程序,因为它们只是随机地(从用户角度)决定,“嘿,我需要更多内存。内核,我需要更多内存!”而不是“嘿,我需要更多内存……糟糕,我出局了。我该削减什么?”

目前我能找到的最佳方法是将 Chrome 和 Firefox (单独) 隔离到其他机器上的虚拟机中,并锁定最大内存占用量。但是,这非常浪费,对于像 Flash 游戏这样的游戏来说,结果很糟糕,尤其是那些需要硬件加速的游戏。

只有上帝才知道是什么占用了这么多内存,因为每个浏览器通常不会打开超过 15 个选项卡。所以,这又是一个令人沮丧的事情。

我如何强制某些程序运行在它们所熟知的一定内存占用范围内?

虽然这个问题可能仅限于 Chrome 或 Firefox,但我确信还有其他非常浪费资源的程序需要某种限制。因此,虽然修复 Firefox 和 Chrome 不良行为的解决方案可能满足我的需要,但我真正想要的是更通用的解决方案。

答案1

您可以使用:

  • 对照组(cgroups]) 在您的主操作系统上。
  • lxc而不是使用虚拟机cgroups记忆控制。

有关内核中内存控制所有选项的参考,您可以查看这里

此解决方案适用于任何程序或程序组。

答案2

您可以使用 ulimit 设置通过当前终端启动的进程的最大内存,或者使用类似软限制启动具有给定内存限制的程序。一旦达到该限制,内存分配将失败并出现 ENOMEM(并非所有程序都能正确处理)。

相关内容