以非常非常低的优先级运行 Linux 进程?

以非常非常低的优先级运行 Linux 进程?

我有一个不那么重要但会消耗大量CPU 资源的常规进程。我还有另一个进程,它非常重要,但它大部分时间都处于闲置状态,但是当它得到工作时,它确实需要很高的计算能力。

我尝试使用nice -20 ./low_priority_processand运行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将进程放入“真正的”空闲调度程序中。

http://linux.die.net/man/1/chrt

答案3

对于未来的人,这里有一个完整的nice例子压力

  1. 测试机有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
...
  1. 安装stressapt-get install stress
  2. 让 2 个 CPU 忙于低优先级调用以施加压力:nice -20 stress --cpu 2
  3. 使用以下命令检查 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都被完全占用。

  1. 启动高优先级的单CPU压力进程:nice --20 stress --cpu 1
  2. 再次检查 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

  1. 另一方面,终止所有上述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

cpulimit -l 50 python 0 9999999999 > /dev/null &

相关内容