我正在 Beaglebone green 上运行 un tar ie tar xzvf abc.tar.gz 。这似乎使用了太多的CPU。当解压操作正在进行时,我通过 top 命令查看 CPU 使用情况..不知道为什么它似乎创建了 2 个不同的进程,知道为什么吗???
PID PPID USER STAT VSZ %VSZ %CPU COMMAND
626 625 root R 1956 1% 64% tar xzvf abc.tar.gz
625 612 root S 1960 1% 12% tar xzvf abc.tar.gz
如何限制 untar 进程不使用过多的 CPU?有一个时间关键的实时进程,它不会占用 CPU,并且每当运行 untar 时就会受到影响。因此,需要以某种方式限制解压,以便在任何时候都不会使用超过 40 - 50% 的 CPU。
答案1
cpulimit -fl 50 -- tar xzvf abc.tar.gz
男子CPU限制:
cpulimit -- limits the CPU usage of a process
-l, --limit=N
percentage of CPU allowed from 1 up. Usually 1 - 100, but can be
higher on multi-core CPUs. (mandatory)
-f, --foreground
run cpulimit in foreground while waiting for launched process to
finish
• cpulimit always sends the SIGSTOP and SIGCONT signals to a process,
both to verify that it can control it and to limit the average
amount of CPU it consumes. This can result in misleading (annoy‐
ing) job control messages that indicate that the job has been
stopped (when actually it was, but immediately restarted). This
can also cause issues with interactive shells that detect or other‐
wise depend on SIGSTOP/SIGCONT. For example, you may place a job
in the foreground, only to see it immediately stopped and restarted
in the background.
答案2
仅当您的 CPU 变得太热或当您的 CPU 被充分使用时可能出现任何问题或当您不希望任务运行得那么快时,您才需要限制 CPU 使用。
不充分利用它只是将 CPU 周期浪费在“空闲任务”上
如果问题是您希望另一个进程优先获得这些 CPU 周期,那么解决方案是降低tar
/的优先级gzip
,或者换句话说,增加其优先级善良。
例如,通过使用:
nice 20 tar...
其中 20 是最高的好感度。这样,tar
如果其他进程需要一些 CPU 周期,则将获得很少的 CPU 周期,但当系统无事可做时,仍将使用 100% CPU。
现在,如果您的其他进程确实使用实时优先级,那么您不必这样做,因为调度程序应该优先考虑实时进程而不是普通进程,因此 CPU 可能不是您的进程可以使用的资源不能坚持下去,改变优先级或减少 CPU 使用率都tar
无济于事。
您可能还想ionice
使用tar
:
nice 20 ionice -c idle tar...
引用手册ionice
页:
闲置的 仅当没有其他程序在定义的宽限期内请求磁盘 I/O 时,以空闲 I/O 优先级运行的程序才会获得磁盘时间。空闲 I/O 进程对正常系统活动的影响应该为零。