将长时间运行的任务交替暂停/运行以减少 CPU 占用

将长时间运行的任务交替暂停/运行以减少 CPU 占用

我有一个大文件需要 mv,即使使用 Nice -n19,它似乎也会影响服务器性能。

我认为一个选择是以“块”的方式运行该进程,即我运行命令几秒钟,然后休眠几秒钟,然后恢复该进程。

有没有办法从命令行或更好的替代方案来执行此操作?目前我手动执行 Ctrl Z 和 fg 。

答案1

您的性能影响可能是由 I/O 瓶颈引起的,因为mv通常不需要大量 CPU 周期(除非涉及加密/解密)。nice改变任务列表中任务的调度优先级,使该任务在CPU上运行。

因此,不要nice尝试(对于内核> 2.6.25)

ionice -c3 mv <src> <dest>

ionice -h

 ionice [options] <command>
   -c, --class <class>    name or number of scheduling class,
                      0: none, 1: realtime, 2: best-effort, 3: idle

man ionice

 Idle   A program running with idle I/O priority will only get disk time 
        when no other program has asked for disk I/O for a defined grace 
        period.  The impact of an idle I/O process on normal system activity
        should be zero.

答案2

就像是:

$command & pid=$!
while kill -STP -$pid && sleep $interval && kill -CONT -$pid && sleep $interval; do :; done

能做到这。

作业控制实际上是发送这两个信号(SIGSTP 和 SIGCONT),因此这基本上是手动完成的作业控制。

相关内容