使用 nice 和 cpulimit 控制进程 CPU 使用率 [Linux]

不管你的 Linux 机器有多快,总会有一些任务消耗大量 CPU 时间。 从视频编码到运行数学模型的一切都可以使 CPU 以 100% 的速度运行。 如果机器不做任何其他事情,这很好。 但是,如果它是您的主桌面或用作服务器,那么运行最大化 CPU 的任务将使机器运行缓慢且难以使用。 多任务操作系统的美妙之处在于机器不会死机,因为它总是会为其他任务安排 CPU 时间,而桌面之类的东西仍然可以工作,但速度要慢得多。 调度程序无法知道您希望 CPU 密集型任务以较低的优先级运行还是限制其 CPU 时间。 但是,有一些工具可用于控制这些资源密集型任务的进程 CPU 使用率。

要模拟 CPU 密集型任务,我们可以使用一个名为 matho-prime 它生成一个素数列表。 如果你要求它生成一个足够大的列表,它会在它工作时最大化 CPU。 安装 matho-prime 在 Ubuntu 或 Raspberry Pi 上使用:

让我们启动任务并查看 CPU 使用率:

这告诉 matho-primes 生成一个从 0 到 99999999999 的素数列表! 输出重定向到文件 p.txt. 最后的 & 号告诉 shell 在后台运行程序,这意味着您在启动任务后直接返回到命令提示符。

现在运行 top 命令并注意素数生成器正在使用的 CPU 量。

现在让我们终止该任务并看看我们如何以较低的优先级启动它。 Exit topq,然后键入 fg 带来 matho-primes 到前台,然后按“Ctrl + C”强制程序退出。

现在再次启动程序,但在命令的开头添加单词 nice

nice 是一个告诉 Linux 以较低优先级安排此任务的工具。 niceness 范围从 -20(最有利的调度)到 19(最不利的调度)。 默认情况下 nice 将以 10 的 niceness 调度任务。默认情况下,正常任务以 0 的 niceness 启动。 这意味着,niceness 为 10 的任务将被视为较低优先级,并且较少获得 CPU 资源。

我们现在可以启动第二个质数生成器来模拟您想在您的机器上执行的其他任务(例如网页浏览或编写文档)。 这将具有正常的好处,因为使用桌面应该比运行素数生成器具有更高的优先级。

请注意,此文件的输出被重定向到 p2.txt. 从输出 top 看起来像这样:

matho-primes-nice

如您所见,niceness 越高的进程接收的 CPU 时间越少。 这意味着如果你启动一个 CPU 密集型任务 nice,它不会让您的机器感觉迟钝或导致它响应缓慢。

cpulimit

还有一个名为“cpulimit”的命令,它不会更改调度优先级,而是暂时暂停进程以确保它不会超过所需的 CPU 使用率。

要安装它,请键入:

现在再次运行 CPU 密集型素数生成器,并使用以下命令记录其 PID 编号:

输出的第一列是 PID。 现在限制该进程的 CPU 使用率,如下所示:

其中 16299 是 matho-primes 过程。 一看 top 将显示如下内容:

matho-primes-cpulimit

走得更远

有一个伴随命令 nicerenice 这将改变现有流程的好处。 尝试使用 top 或者 psgrep 获取进程的PID并使用 renice +19 16299 将优先级设置为尽可能低的(其中 16299 是进程的 PID)。

随时在下面的评论中添加讨论。

订阅我们的新闻!

我们最新的教程直接发送到您的收件箱

注册所有时事通讯。 注册即表示您同意我们的隐私政策并且欧洲用户同意数据传输政策。 我们不会共享您的数据,您可以随时取消订阅。 订阅