nice -n 19 find . -type f \( -iname "*.php" -o -iname "*.js" -o -iname "*.inc" \) \
-exec zip live.zip '{}' \;
上述命令在我们的实时 CentOS 服务器上运行,就好像该nice
命令不存在一样。大约 60 秒后,我可以看到使用该命令zip
时它位于“顶部” 。top
服务器开始翻倒,我不得不让命令崩溃。
从评论中我推断您的服务器内存不足,这实际上根本不是 CPU 或 I/O 或优先级问题。
尝试用 tar 之类的流式解决方案替换压缩。这应该会大大减少所需的内存:
find . -type f \( -iname "*.php" -o -iname "*.js" -o -iname "*.inc" \) -print0 \
| xargs -0 tar cvzf live.tar.gz
在此命令上使用nice
仍然是进一步减少影响的选择。它必须与可能更长的运行时间和同时使用的其他资源(尤其是内存)相平衡。
nice
只设置一个进程的调度优先级。它不限制它消耗多少 CPU 时间。
所以:如果一个低优先级的进程想要消耗大量的 CPU 时间/资源,那么它会得到它们。直到具有更高优先级的进程占用 CPU 时间。
关键是:如果 CPU 没有其他事情可做,那么为什么不将所有 CPU 时间提供给需要它的进程,即使它没有高优先级?
如果您想将 CPU 使用率限制为最大值的百分比,请考虑使用类似cpulimit
编辑:
zip
可能会严重减慢速度的其他原因是:
磁盘 I/O:您可以ionice
在某些发行版上控制它(不确定 CentOS 是否默认具有它) - David Schmitt 在下面的评论中指出了这一点。
zip
可能会分配大量内存,并换出其他进程。然后,当这些进程唤醒时(比如mysqld
收到查询),它们就会变得迟缓。您可以通过减少Swappiness来解决这个问题。但这是一个系统级参数,您可能希望保持不变。