我已经阅读了renice和ionice来控制正在运行的进程的调度优先级。 但是,我仍然不明白什么时候以及如何有用。 比如做如下的事情:
nice -n 13 pico myfile.txt
对于皮科而言,它不太可能引起担忧,所以它通常不是很好的命令/ renice或ionice。 但是,你的命令会执行微小的+ 13。 这意味着分配给它的时间会大大减less。 例如,从你的微微线路上继续。 通常pico执行如下所示:
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD 501 20118 20117 4006 0 31 0 2435548 1068 - S eb577e0 ttys000 0:00.03 -bash 501 20136 20118 4006 0 31 0 2434992 772 - S+ 85eed20 ttys000 0:00.00 pico
NI是很好的水平。 如果我用你的命令运行pico,看起来像这样:
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD 501 20118 20117 4006 0 31 0 2435548 1068 - S eb577e0 ttys000 0:00.03 -bash 501 20179 20118 4006 0 18 13 2434992 904 - SN+ 85eed20 ttys000 0:00.01 pico
好的,以便演示你运行的命令行是有效的,但它实际上是做什么的? 好吧,让我们说你有一个相当繁忙的系统,但不是淫秽的。 这是非常忙碌的时间,在午夜一个重要的维护任务开始。 它是运行脚本来生成一些日常统计信息的mysql命令行。 有很多的处理,所以它很难打到CPU,用户抱怨这一点。 和他们一样,他们的确很厉害。 你能为这个做什么? 这个脚本需要多长时间不是必需的,所以你在命令前加上“nice -n 13”,下一次运行它不会影响用户这么糟糕,但需要花费更长时间才能完成。 MySQL脚本的所有者并不在意,因为他只在第二天进入时才需要统计信息。 大家都开心。
除了这些工具之外的故事可以让你对系统如何优先分配给任务的CPU(可能是在ionice的情况下)时间进行一些控制。 只有当系统被加载时,它们才会有效果,在这之前每个任务都被分配了。
renice命令以非常类似的方式工作,但它允许您更改已经运行的进程的优先级。 所以在上面的轶事中,您可以使用renice来更改mysql命令的优先级而不重新启动它。 以下命令会将所有名为“mysql”的正在运行的任务渲染为+13,优先级较低:
renice -n 13 -p `pidof mysql`
至于ionice我不能评论,但会猜测它可以让你用IO做类似的事情。 影响特定任务执行的程度,例如磁盘读取/写入。 如果需要,可以在限制备份过程中起作用吗?
ionice是Linux内核IO调度器子系统的接口,它允许在每个进程的基础上设置IO优先级。 这样的用例就像是减less了为命令locate命令build立数据库的updatedb命令的优先级,使得其他IO不受干扰地运行,因为updatedb只有在当前没有其他IO正在运行时才能进行IO操作。