我有以下命令(简化):
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
谢谢
答案1
总结:正确的命令是
mysqldump <databases> | nice bzip2 > backupfile.sql.bz2
该nice
命令只会改变它作为直接参数接收的命令的优劣。如果你只是把它写在行首,它并不适用于整个管道或命令链。
所以:
mysqldump <databases> | nice bzip2 > backupfile.sql.bz2
将会按照您的要求
mysqldump
正常启动,同时bzip2
运行时会将 niceness 属性提升至 +10。nice mysqldump <databases> | bzip2 > backupfile.sql.bz2
将会做与你想要的相反的事情,它会使事情变得
mysqldump
更好,但让它bzip2
正常运行。第三个选项是,让你可以很好地运行管道的所有命令,即在新的 shell 进程中以更高的优先级执行它们,例如
nice bash -c 'mysqldump <databases> | bzip2 > backupfile.sql.bz2'
但是,请注意,提高进程的友好度不是必然会降低其 CPU 使用率。只要您仍有 CPU 资源,Nice 进程将继续使用尽可能多的 CPU 时间。只有当您的 CPU 超载时(即您正在运行的进程总共请求的 CPU 时间超过您所能提供的),Nice 进程才会退后一步,让 CPU 为正常或不 Nice 进程提供更高的优先级。
答案2
如果您只想要 bzip,请选择第一个版本。