更新(2017 年 10 月 8 日)

更新(2017 年 10 月 8 日)

Ubuntu 的资源管理有一个恼人的问题。经常发生这样的情况:某些程序(例如 Google Chrome 浏览器)占用了 100% 的 CPU 和笔记本电脑的大部分内存。

我希望操作系统始终保持响应,这意味着我希望能够在程序之间切换并在屏幕上移动鼠标或切换到 tty 并向操作系统发出命令。因此,我寻找一种方法来配置操作系统,使其为自己保留 10% 的系统资源。目前 Ubuntu 的行为方式并非如此,chrome 经常会消耗我所有的 CPU 和内存,然后系统变得没有响应,当然我等不了超过一两分钟,所以我不得不长按电源按钮。

有什么方法可以让 Ubuntu 始终保持响应?至少我可以杀死那些占用大量资源的程序吗?(我知道内核最终会杀死一些程序以释放一些空间,但我想强制它更快地完成此操作或为自己保留更多资源)

Version: UBUNTU 14.04
~$ uname -a
Linux spielplatz 3.13.0-45-generic #74-Ubuntu SMP Tue Jan 13 19:36:28 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

CPU: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
RAM: 8GB

更新(2017 年 10 月 8 日)

到目前为止,我发现最好的解决方案是使用 cgroups。要旨为了那个原因。

答案1

cpulimit以前曾经“限制”那些失控的、占用大量 CPU 的程序(Xfce4 Mailwatch 插件有时会挂起并占用 100% 的 CPU)。cpulimit 是:

限制进程 CPU 使用率的工具

cpulimit 是一个简单的程序,它试图限制进程的 CPU 使用率(以百分比表示,而不是以 CPU 时间表示)。当您不希望批处理作业占用过多的 CPU 时,它对于控制批处理作业非常有用。它不会根据 nice 值或其他优先级内容采取行动,而是根据实际 CPU 使用率采取行动。
此外,它能够动态、快速地适应整个系统负载。

它的工作原理是监视目标进程,并发送“SIGSTOP 和 SIGCONT 向进程发出信号,既是为了验证它是否可以控制它,也是为了限制它消耗的平均 CPU 量。”看:

它应该能使操作系统的其他部分响应更快,但我在 Firefox 上尝试过,结果发现响应速度慢了很多,所以可能不是 Chrome 浏览器的最佳解决方案。寻找加快 Chrome 本身速度的方法可能会更有成效。

如果你只是想要一个好方法来查看 CPU 和 RAM 的使用情况,以及哪些进程正在使用它们,我建议使用系统监控程序(例如top,,htop我更喜欢康基),然后当您看到某些东西占用了您所有的 CPU 或 RAM 时,您可以关闭/重新启动等等。


如果您有兴趣了解哪些程序被安排首先运行,请查看调度优先级和“友好度”。也许您可以让 Chrome 表现得“更友好”,而不会削弱它。
以下是来自 的一段剪辑info coreutils 'nice invocation'

“nice” 打印一个进程的“niceness”,或者运行一个修改了niceness的命令。“niceness”会影响进程在系统中的调度程度。

友好度值的范围至少为 -20(进程具有高优先级并获得更多资源,从而减慢其他进程的速度)到 19(进程具有较低的优先级并且本身运行缓慢,但对其他正在运行的进程的速度影响较小)。某些系统可能具有更广泛的友好度值范围;相反,其他系统可能会实施更严格的限制。尝试将友好度设置为支持范围之外的值将被视为尝试使用最小或最大支持值。

不应将 niceness 与调度优先级相混淆,后者允许应用程序确定线程的调度运行顺序。与优先级不同,niceness 只是对调度程序的建议,调度程序可以忽略它。此外,从术语上讲,POSIX 用“nice 值”来定义“nice”的行为,nice 值是 niceness 与最小 niceness 之间的非负差。虽然“nice”符合 POSIX,但其文档和诊断使用术语“niceness”以与历史实践兼容。

以下是一些关于日程安排的实用链接


还有穆鲁的评论/帖子Cgroups(在 ArchWiki 上)看起来不错,关于限制内存,看起来它也可以限制 CPU 核心和“共享”(“默认情况下,所有组都有 1024 个共享。拥有 100 个共享的组将获得约 10% 的 CPU 时间”)。

ArchWiki 文章的第一段也提到了这个可能有用的选项,但我认为它们主要用于限制用户/组,请参阅:man pam_limits&man limits.conf

相关内容