限制进程 CPU 使用率 - 方法?

use*_*118 8 linux process

我想将进程的 CPU 使用率限制为 10%。

可以做到的一种方法是每分钟连续运行该过程 6 秒,并在其余时间暂停它。

我不想用 nice 改变进程优先级。

Jou*_*eek 6

cpulimit此处为较新的github 链接)似乎是该工作的工具 - 它允许您通过 PID、进程名称或绝对位置来控制进程的处理器使用情况,并根据总数的百分比设置其处理器使用情况。

从 sourceforge 页面上的文档 -

使用示例

通过可执行文件名称将进程“bigloop”限制为 40% CPU:

cpulimit --exe bigloop --limit 40
cpulimit --exe /usr/local/bin/bigloop --limit 40 
Run Code Online (Sandbox Code Playgroud)

通过 PID 将进程限制为 55% CPU:

cpulimit --pid 2960 --limit 55 
Run Code Online (Sandbox Code Playgroud)

通过命令行启动进程并将其限制为 40%(仅限开发版本!):

cpulimit --limit 40 /etc/rc.d/rc.boinc start 
Run Code Online (Sandbox Code Playgroud)

Cyber​​citi.biz 有一个howto也表明你也许可以使用

-p : Process PID.
-e : Process name.
-l : percentage of CPU allowed from 0 to 100.
-P: absolute path name of the executable program file.
Run Code Online (Sandbox Code Playgroud)

而不是 --exe 等等。

对于多处理器,您应该根据 100 * 内核数设置百分比 - 因此双系统最多可以允许百分比为 150,四核最多可以允许百分比为 200


Dio*_*ogo 3

由于您没有指定您的操作系统,我将在这里添加一个用于 Windows 的选项和另一个用于 Linux 的选项:

\n\n

对于Linux:

\n\n

使用压力

\n\n
\n

stress 是 POSIX 系统的一个特意简单的工作负载生成器。\n 它对系统施加可配置数量的 CPU、内存、I/O 和磁盘压力\n。它是用 C 语言编写的,是根据 GPLv2 许可的自由软件。

\n\n

下面是一个调用示例:通过指定两个 CPU 密集型进程、一个 I/O 密集型进程和一个内存分配器进程,对系统施加 4 的平均负载。

\n
\n\n
   $ stress --cpu 2 --io 1 --vm 1 --vm-bytes 128M --timeout 10s --verbose\n   stress: info: [9372] dispatching hogs: 2 cpu, 1 io, 1 vm, 0 hdd\n   stress: dbug: [9372] (243) using backoff sleep of 12000us\n   stress: dbug: [9372] (262) setting timeout to 10s\n   stress: dbug: [9372] (285) --> hogcpu worker 9373 forked\n   stress: dbug: [9372] (305) --> hogio worker 9374 forked\n   stress: dbug: [9372] (325) --> hogvm worker 9375 forked\n   stress: dbug: [9372] (243) using backoff sleep of 3000us\n   stress: dbug: [9372] (262) setting timeout to 10s\n   stress: dbug: [9372] (285) --> hogcpu worker 9376 forked\n   stress: dbug: [9375] (466) hogvm worker malloced 134217728 bytes\n   stress: dbug: [9372] (382) <-- worker 9374 signalled normally\n   stress: dbug: [9372] (382) <-- worker 9373 signalled normally\n   stress: dbug: [9372] (382) <-- worker 9375 signalled normally\n   stress: dbug: [9372] (382) <-- worker 9376 signalled normally\n   stress: info: [9372] successful run completed in 10s\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于 Windows:

\n\n

使用BES \xe2\x80\x93 战斗编码器 Shirase 1.4.5 / 1.5.2

\n\n
\n

控制每个进程 CPU 使用情况的免费软件。\xe2\x80\x9cActive\xe2\x80\x9d 软件\n CPU 冷却器。BES 是一个小工具,可以限制您\xe2\x80\x9ctarget\xe2\x80\x9d 进程的CPU 使用率:例如,您可以限制\n 使用CPU 100% 的进程的CPU 使用率,降低至 50%(或您\xe2\x80\x99d\n 喜欢的任何百分比)。这样,您就可以在后台执行一些 CPU 密集型操作时舒适地使用其他程序。

\n\n

通过限制 CPU 负载,您还可以在 CPU 过热时立即冷却 CPU。它\xe2\x80\x99 是一个\xe2\x80\x9cactive\xe2\x80\x9d 软件CPU 冷却器。\n 传统的软冷却器通过在CPU 空闲时使CPU 进入睡眠状态来节省CPU 能量。他们被动地等待,直到CPU空闲。BES 更加激进:它通过减慢 \xe2\x80\x9cheating\xe2\x80\x9d 进程的速度来冷却 CPU,即定期强制 CPU 短暂空闲。(但是,如果您经常需要使用 BES 来实现此目的,则应该安装更好的硬件冷却器。实际上,您应该尝试的第一件事是清除散热器周围的灰尘(见下文)。主动软-冷却可能是一个有趣的技巧,但它毕竟只是一种解决方法。另一方面,如果您的应用程序毫无意义地使用 CPU 100%,那么让 BES 来完成这项工作!)

\n
\n\n

在此输入图像描述

\n\n

您还可以使用 Windows 命令行使其自动化:

\n\n
\n

以下命令行告诉 BES 监视 target.exe,并在 target.exe 开始运行时\xe2\x80\x94限制其 CPU 使用率,以便仅允许 target.exe\n 使用 CPU (最多 100 \xe2\x88\x92 百分比) %:

\n
\n\n
"C:\\path\\to\\bes.exe" "D:\\path to\\target.exe" [percentage] [--minimize]\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

或者,您可以使用 1 到 99 之间的整数作为百分比。如果百分比被省略或无效,则自动使用 target.exe 最后已知的有效百分比(如果这是第一次定位 target.exe,则将应用默认减少 33%,除非\n百分比已指定)。请注意,当从命令行启动时,\n BES 将监视/限制目标,而不仅仅是限制它。

\n
\n

  • “压力”与这个问题有什么关系?它添加了新的进程,这些进程消耗固定数量的处理器时间,但问题想要限制现有的应用程序。 (9认同)