补充说明
ionice 是 util-linux 提供的工具,用于查看或设置进程的 I/O 优先级(ioprio)。它把进程划分为三种调度类:1 realtime、2 best-effort、3 idle,其中 best-effort 还可设置 0–7 的优先级数值。
典型场景是降低备份、压缩、日志归档等后台任务的 I/O 影响:用 ionice -c 3 让进程只在磁盘空闲时读写;或用 ionice -c 2 -n 7 给它较低的 best-effort 优先级。也可以对正在运行的进程用 -p 动态调整。
关键限制:ionice 的优先级只有在 I/O 调度器支持时才会生效。传统 CFQ/BFQ 会遵守;使用 none(noop)或某些 blk-mq 调度器时,内核可能忽略该设置。SSD 与 NVMe 上效果通常不如机械盘明显。它只影响 I/O,不影响 CPU 调度,CPU 优先级请用 nice。
语法
ionice [选项] [命令 [参数...]]
ionice [选项] -p PID...
选项
-c 类:调度类,0none、1realtime、2best-effort、3idle-n 级别:best-effort/realtime 的优先级,0 最高、7 最低-p PID:修改已存在进程,而非启动新命令-P PGID:按进程组修改-u UID:按用户修改其所有进程-t:忽略设置失败,继续执行命令-h:显示帮助-V:显示版本
实例
# 查看当前 shell 的 I/O 优先级
ionice -p $$
# 以后台空闲类运行 tar 备份
ionice -c 3 tar czf backup.tar.gz /data
# 低优先级 best-effort 运行 rsync
ionice -c 2 -n 7 rsync -a /src/ /dst/
# 调整正在运行的进程(PID 12345)
sudo ionice -c 3 -p 12345
# 按进程组调整
sudo ionice -c 2 -n 7 -P 12345
# 忽略失败,保证命令仍执行
ionice -t -c 3 some-command
# 查看某进程当前的 I/O 优先级
ionice -p 12345
可与 nice 组合使用:nice -n 19 ionice -c 3 command,同时降低 CPU 与 I/O 抢占。若发现设置无效,先确认磁盘调度器:cat /sys/block/sda/queue/scheduler。