ionice 是 Linux 中用于设置进程 I/O 调度优先级的命令,影响磁盘请求调度顺序而非 CPU 使用率;支持 Class 0(兼容)、Class 1(实时,需特权)、Class 2(默认,0–7 级)、Class 3(空闲级)四类策略,常与 nice 配合实现 CPU 与 I/O 双重降载。

ionice 是 Linux 中用于设置进程 I/O 调度优先级的命令,它不改变 CPU 使用率,而是影响进程对磁盘(尤其是传统 HDD)发起读写请求时被内核调度的“先后顺序”和“频次”。在多任务、高 I/O 负载场景下(如数据库备份同时跑日志分析),合理使用 ionice 可避免低优先级任务拖慢关键服务的响应速度。
理解 ionice 的三类调度类
ionice 支持三种调度策略,通过 -c 参数指定:
- Class 0(None):实际等同于 Class 2,仅用于兼容旧程序,不推荐主动使用;
- Class 1(Realtime):最高优先级,I/O 请求会被立即处理,但滥用会导致其他进程饥饿(如系统日志、SSH 响应变卡),普通用户通常无权限使用;
- Class 2(Best-effort):默认类别,适用于绝大多数用户进程,可通过 -n 指定 0–7 的优先级值(0 最高,7 最低);
- Class 3(Idle):最低优先级,仅在系统空闲时才允许执行 I/O,适合不影响实时性的后台任务(如 nightly rsync、logrotate)。
常见用法与实用示例
ionice 可以启动新进程,也可调整已有进程:
- 启动一个低干扰的备份任务:
ionice -c3 tar -cf backup.tar /data - 将正在运行的 rsync 进程设为“空闲级”:
ionice -c3 -p $(pgrep rsync) - 以 Best-effort 类别、优先级 6 启动压缩(比默认更低):
ionice -c2 -n6 gzip largefile.log - 查看某进程当前 I/O 调度策略:
ionice -p PID(例如 ionice -p 1234)
注意事项与限制
ionice 效果依赖底层 I/O 调度器和存储类型:
- 对使用 CFQ(已弃用)或 BFQ 调度器的系统效果明显;deadline 和 noop 不支持 ionice;
- 在 SSD 上效果有限——因随机访问延迟极低,调度差异不易感知,但仍可减少队列争抢;
- 普通用户只能设置 Class 2(0–7)和 Class 3,Class 1 需要 cap_sys_nice 权限(通常仅 root);
- ionice 设置的是“请求调度优先级”,不是带宽配额,无法限制最大吞吐量(需搭配 cgroups v2 io.max 实现)。
配合 nice 实现更全面的资源控制
CPU 和 I/O 是两类独立资源。若想同时降低进程对系统整体的影响,建议组合使用:
- 启动一个“又轻又慢”的归档任务:
nice -n19 ionice -c3 tar -cf archive.tar /bigdir - 其中 nice -n19 让出 CPU 时间片,ionice -c3 让出磁盘时间片,两者协同更彻底地降低干扰。










