我想将某个进程的 CPU 使用率限制为 10%。
实现此目的的一种方法是每分钟连续运行该过程 6 秒,其余时间暂停。
我并不想用nice来改变进程优先级。
答案1
CPU限制(较新github 链接在这里) 似乎是适合这项工作的工具 - 它允许您通过 PID、进程名称或绝对位置控制进程的处理器使用情况,并根据总百分比设置其处理器使用情况。
来自 sourceforge 页面上的文档 -
使用示例
将可执行文件名称的进程‘bigloop’限制为 40% CPU:
cpulimit --exe bigloop --limit 40
cpulimit --exe /usr/local/bin/bigloop --limit 40
将 PID 进程的 CPU 限制为 55%:
cpulimit --pid 2960 --limit 55
通过命令行启动一个进程并将其限制为 40%(仅限开发版本!):
cpulimit --limit 40 /etc/rc.d/rc.boinc start
Cyberciti.biz 有一个如何这也表明你也许可以使用
-p : Process PID.
-e : Process name.
-l : percentage of CPU allowed from 0 to 100.
-P: absolute path name of the executable program file.
而不是--exe等等。
对于多处理器,您应该根据 100 * 核心数来设置百分比 - 因此双系统可以允许百分比高达 150,四核可以允许百分比高达 200
答案2
由于您没有指定您的操作系统,我将在这里提供一个适用于 Windows 的选项和另一个适用于 Linux 的选项:
对于 Linux:
使用压力:
Stress 是专为 POSIX 系统设计的一款简单工作负载生成器。它对系统施加可配置的 CPU、内存、I/O 和磁盘压力。它使用 C 语言编写,是 GPLv2 许可下的免费软件。
下面是一个示例调用:通过指定两个 CPU 密集型进程、一个 I/O 密集型进程和一个内存分配器进程,对系统施加 4 的平均负载。
$ stress --cpu 2 --io 1 --vm 1 --vm-bytes 128M --timeout 10s --verbose
stress: info: [9372] dispatching hogs: 2 cpu, 1 io, 1 vm, 0 hdd
stress: dbug: [9372] (243) using backoff sleep of 12000us
stress: dbug: [9372] (262) setting timeout to 10s
stress: dbug: [9372] (285) --> hogcpu worker 9373 forked
stress: dbug: [9372] (305) --> hogio worker 9374 forked
stress: dbug: [9372] (325) --> hogvm worker 9375 forked
stress: dbug: [9372] (243) using backoff sleep of 3000us
stress: dbug: [9372] (262) setting timeout to 10s
stress: dbug: [9372] (285) --> hogcpu worker 9376 forked
stress: dbug: [9375] (466) hogvm worker malloced 134217728 bytes
stress: dbug: [9372] (382) <-- worker 9374 signalled normally
stress: dbug: [9372] (382) <-- worker 9373 signalled normally
stress: dbug: [9372] (382) <-- worker 9375 signalled normally
stress: dbug: [9372] (382) <-- worker 9376 signalled normally
stress: info: [9372] successful run completed in 10s
对于 Windows:
使用BES – 战斗编码器 Shirase 1.4.5 / 1.5.2:
控制每个进程 CPU 使用率的免费软件。“主动”软件 CPU 冷却器。BES 是一款小型工具,可限制您“目标”进程的 CPU 使用率:例如,您可以将使用 CPU 100% 的进程的 CPU 使用率限制到 50%(或您想要的任何百分比)。有了它,您可以在后台执行 CPU 密集型操作的同时舒适地使用其他程序。
通过限制 CPU 负载,您还可以在 CPU 过热时立即冷却它。它是一种“主动”软件 CPU 冷却器。传统的软冷却器通过在 CPU 空闲时使其休眠来节省 CPU 能量。它们被动地等待直到 CPU 空闲。BES 更积极:它通过使“加热”过程减慢来冷却 CPU,即定期强制 CPU 短暂空闲。(但如果您经常需要为此目的使用 BES,则应该安装更好的硬件冷却器。实际上,您应该尝试做的第一件事是清除散热器周围的灰尘(见下文)。主动软冷却可能是一种有趣的技巧,但它毕竟只是一种变通方法。另一方面,如果您的应用程序毫无意义地使用 100% 的 CPU,那么让 BES 来做这项工作吧!)
您还可以使用 Windows 命令行自动执行此操作:
以下命令行告诉 BES 监视 target.exe,并且 — 当 target.exe 开始运行时 — 限制其 CPU 使用率,以便 target.exe 最多只能使用 CPU(100-百分比)%:
"C:\path\to\bes.exe" "D:\path to\target.exe" [percentage] [--minimize]
可选地,您可以使用 1 到 99 之间的整数作为百分比。如果百分比被省略或无效,则自动使用 target.exe 的最后一个已知有效百分比(如果这是第一次针对 target.exe,则将应用默认减少 33%,除非指定百分比)。请注意,从命令行启动时,BES 将监视/限制目标,而不仅仅是限制它。
答案3
对于 Windows:(这只是对@Diogo 答案的扩展。)
作为一名 Windows 用户,我希望只需单击一个快捷方式即可让所需的目标程序自动以所需的 CPU 节流阀运行,我发现它需要更多涉及批处理文件的步骤,并且需要澄清如何在建议的命令行中准确实现 [百分比] 和 [--最小化] 部分:
"C:\path\to\bes.exe" "D:\path to\target.exe" [percentage] [--minimize]
我最终使用的方法如下。制作一个 Windows批处理文件,用文本编辑器创建一个文件,并将其命名为“[name].bat”(例如:something.bat)。在文件中输入以下内容:
@echo off
start "" "C:\path\to\bes.exe" "D:\path to\target.exe" 90 -m
start "" "D:\path to\target.exe"
在哪里:
- 开始“”,允许贝塞尔以及要运行的目标程序同时。
- “C:\path\to\bes.exe” 是引号内 BES 程序的准确路径,
- “D:\path to\target.exe” 是您要用来限制 CPU 的程序的确切路径。在引号内,
- 90是减少的百分比,在本例中意味着将 CPU 限制减少到 100-90= 10%
- -m 表示以最小化方式启动 BES 程序(根据 BES 说明:“--minimize 选项(简称 -m)告诉 BES 以最小化方式启动(发送到系统托盘)。“
然后双击生成的 .bat 文件将运行目标程序,同时使用 BES 自动调节到所需的 CPU 级别。