我有以下命令(简化):
mysqldump <databases> | bzip2 > backupfile.sql.bz2
由于某种原因,bzip2 进程发疯了,CPU 负载高达 60。我不知道为什么,但我希望将来使用 nice 可能会减轻它,但我只希望在 bzip2 上使用 nice,而不是 mysqldump。
我可以把它改成
mysqldump <databases> | nice bzip2 > backupfile.sql.bz2
还是我必须做
nice mysqldump <databases> | bzip2 > backupfile.sql.bz2
谢谢
TL;DR:正确的命令是
该
nice
命令仅更改它作为直接参数接收的命令的好坏。如果您只是在行首编写它,则它不适用于整个管道或命令链。所以:
会做你想做的事并
mysqldump
正常启动,而bzip2
运行时的 niceness 属性会提高 +10。会做与你想要的相反的事情,它会
mysqldump
很好,但让bzip2
正常运行。允许您很好地运行管道的所有命令的第三个选项是在一个新的 shell 进程中以更高的友好度执行它们,比如
但是,请注意提高进程的友好度并不一定会降低其 CPU 使用率。只要你还有剩余的 CPU 资源,一个好的进程就会继续使用尽可能多的 CPU 时间。只有当你的 CPU 过载时(意味着你正在运行的进程请求的 CPU 时间总比你所能提供的多),nice 进程才会退后一步,让 CPU 给予正常或 unnice 进程更多的优先级。
如果您只想使用 bzip,请选择第一个版本。