ionice是Linux中用于调整进程磁盘I/O调度优先级的命令,仅影响I/O排队顺序而不改变CPU占用;支持-c 0(弃用)、-c 1(realtime,root专属)、-c 2(best-effort,默认,-n 0~7)、-c 3(idle,普通用户可用)四类,需注意权限限制与进程生效范围。

ionice 是 Linux 中用于调整进程磁盘 I/O 调度优先级的命令,它不改变 CPU 占用,只影响进程访问磁盘时在 I/O 调度器(如 CFQ、kyber 或 mq-deadline)中的排队顺序。正确使用需理解调度类、优先级数值和权限限制。
三种 I/O 调度类及适用场景
ionice 通过 -c 参数指定调度类:
- -c 0(none):已弃用,行为等同于 -c 2;新内核中基本不显式使用
- -c 1(realtime):最高优先级,I/O 请求立即提交,可能饿死其他进程;仅 root 可设,生产环境慎用
- -c 2(best-effort):默认类,支持子优先级(-n 0~7),数值越小优先级越高;普通用户可用
- -c 3(idle):最低优先级,仅当系统无其他 I/O 活动时才执行;普通用户也能设置,适合备份、日志归档等后台任务
设置正在运行进程的 I/O 优先级
用 -p 选项指定 PID,例如:
- 将 PID 为 1234 的进程设为 idle 类:ionice -c 3 -p 1234
- 设为 best-effort 类、第 6 级(较低优先级):ionice -c 2 -n 6 -p 1234
- 查看当前设置:ionice -p 1234
注意:非 root 用户对不属于自己的进程无法修改;尝试提升优先级(如 -c 1 或 -c 2 且 -n 0)会报 Permission denied。
启动新进程时直接指定 I/O 优先级
把 ionice 放在命令前即可,例如:
- 以 idle 类运行大文件复制:ionice -c 3 cp largefile /backup/
- 以 best-effort 最高优先级解压(需 root):sudo ionice -c 2 -n 0 tar -xf archive.tar.gz
- 结合 nice 同时调 CPU 和 I/O:nice -n -5 ionice -c 2 -n 0 ./heavy-io-app
批量设置某用户所有进程的 I/O 优先级
Linux 不支持 ionice --user 这类原生命令,但可用组合实现:
- 获取用户 alice 的全部进程 PID:pgrep -u alice
- 逐个设为 idle 类:pgrep -u alice | xargs -r -I{} ionice -c 3 -p {}
- root 用户设为 best-effort 中低优先级:sudo pgrep -u alice | xargs -r -I{} sudo ionice -c 2 -n 7 -p {}
提醒:该操作只影响当前存活进程;新启动的进程需重新设置,或通过 shell 初始化(如 ~/.bashrc)、systemd user service 或封装脚本固化策略。


















