管道很好?

管道很好?

我有以下命令(简化):

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,请选择第一个版本。

相关内容