我有一个不那么重要但会消耗大量CPU 资源的常规进程。我还有另一个进程,它非常重要,但它大部分时间都处于闲置状态,但是当它得到工作时,它确实需要很高的计算能力。
我尝试使用nice -20 ./low_priority_process
and运行nice --20 ./high_priority_process
,但当高优先级进程需要时,较低优先级进程仍然会消耗大量 CPU。
当另一个进程正在使用 CPU 功率时,如何才能运行一个真正让出甚至自动挂起的进程?
答案1
看一下cgroups,它应该准确提供您所需要的内容 - CPU 预留(以及更多)。我建议阅读使用 cgroup 控制应用程序的优先级。
也就是说,将重要但经常闲置的进程放入分配了 95% CPU 的组中,将其他应用程序放入分配了 5% CPU 的另一组中 - 您将在需要时获得(几乎)所有工作所需的能力,而不断地此时,耗电进程最多只能获得 5% 的电量。当计算激增消失时,所有 CPU 性能都将被分配给剩余的进程。这样做的一个好处是,如果您为 等进程创建一个特殊的 cgroup(具有最低的性能要求)sshd
,那么无论什么尝试获取所有 CPU,您都可以登录 - 一些 CPU 时间将被保留给sshd
。
答案2
如果进程优先级(nice值)较低,那么它不会中断更高优先级的进程。当高优先级进程运行时,您看到低优先级进程仍然消耗大量 CPU 的原因是高优先级进程没有运行。那忙碌的。可能是在等待IO。用于以比(假设我们在这里讨论的是 Linux)chrt -p -i 0 $PID
更低的优先级运行进程。nice 19 -p $PID
chrt -p -i 0 $PID
将进程放入“真正的”空闲调度程序中。
答案3
对于未来的人,这里有一个完整的nice
例子压力。
- 测试机有2个CPU
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 2
...
- 安装
stress
:apt-get install stress
- 让 2 个 CPU 忙于低优先级调用以施加压力:
nice -20 stress --cpu 2
- 使用以下命令检查 CPU 使用情况
top
:
v
v
v
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
15894 ubuntu 39 19 8240 96 0 R 99.7 0.0 0:06.43 stress
15895 ubuntu 39 19 8240 96 0 R 99.7 0.0 0:06.42 stress
这表明两个CPU都被完全占用。
- 启动高优先级的单CPU压力进程:
nice --20 stress --cpu 1
- 再次检查 cpu 使用情况
top
v
v
v
v
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
15928 ubuntu 20 0 8240 100 0 R 99.7 0.0 0:24.02 stress
15894 ubuntu 39 19 8240 96 0 R 51.2 0.0 1:12.46 stress
15895 ubuntu 39 19 8240 96 0 R 48.8 0.0 1:12.35 stress
这表明单核压力进程获得了全部 CPU,而优先级较低的进程则共享剩余的 1 个 cpu
- 另一方面,终止所有上述
stress
调用并仅触发单个 3 进程stress --cpu 3
将为每个进程提供 66% 的 CPU
答案4
尝试此示例将进程作为低级进程运行。
如果你的工作很好tar xvf 资产.zip
使用
不错的 tar xvf asset.zip
之后,发出
top 来监控解压过程
辅助 | grep “焦油”
尝试一些特定的东西CPU限制
wget -O cpulimit.zip https://github.com/opsengine/cpulimit/archive/master.zip
unzip cpulimit.zip
cd cpulimit-master
make
sudo cp src/cpulimit /usr/bin