有没有一种简单的方法可以像上面那样更改整个进程组的 I/O 优先级renice -g
?似乎只支持更改单个进程的 I/O 优先级ionice
。如果无法做到这一点,有人可以指出相关的 API 调用吗(我对 POSIX api 一点也不熟悉),以便我可以编写一个快速命令行实用程序来自己实现此功能?
答案1
您可以创建一个名为 gionice 的脚本,如下所示:
#!/bin/sh
ps -s $1 -o pid | xargs ionice -c 2 -n 0 -p
然后,您可以像下面这样调用它,针对进程组 ID 3266,例如:
./gionice 3266
“ps -s PID -o pid” 逐行打印组长为 PID 的进程标识符。然后,对于每一行,xargs 都会将该行附加在“ionice -c 2 -n 0 -p”之后并调用结果命令。
希望有所帮助。
答案2
您看过 cgroups 和 blkio 模块吗?
http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt
您可以使用它来限制 IO,比单独使用 ionice 具有更多的控制权。您还可以使用 cgrulesengd 守护进程自动将新进程添加到现有的组基础架构中。