做linux运维,排查卡顿我们都有固定套路:top看cpu、free看内存、iostat看磁盘。但很多人都遇到过无解的线上故障:cpu、内存空闲充足,负载正常,网站、数据库却莫名卡顿,ssh操作延迟严重。
这类问题90%的根源不是资源不足,而是后台低优先级任务抢占了磁盘io。文件备份、日志清理、数据同步等进程跑满磁盘读写,直接阻塞数据库、业务接口的核心io请求。一般排查io问题我们都是按照以下步骤进程处理:
#1.查看磁盘io使用率iostat -x 1#重点关注:%util(使用率)、await(平均等待时间)#2.查看哪个进程在疯狂读写iotop#或pidstat -d 1#3.查看进程的io优先级ionice -p 进程pid
当上述指标出现以下情况,可以考虑使用ionice。
#如果同时满足以下条件,就需要 ionice:#1.iostat 显示 %util > 70%#2.await > 20ms#3.但cpu和内存都很空闲
ionice是linux内置io实战神器。它专门管控进程磁盘io优先级,冷门但高效,能彻底解决无征兆io抢占卡顿。
简单来说:nice 管cpu,ionice管磁盘io。
磁盘io是服务器核心瓶颈,属于单通道资源,一旦被非核心任务占满,核心业务必然受阻。ionice的核心价值就是给进程划分io权限等级,强制保障业务进程优先读写,限制后台任务抢占资源。
ionice将进程io分为三个等级,优先级从高到低,日常只用懂后两种即可:
-c 1系统最高io权限,会抢占所有磁盘资源,极易导致系统卡死、业务雪崩。生产环境非紧急故障修复,一般禁止使用。
-c 2(系统默认)所有进程默认等级,支持0-7级精细化权重(0最高、7最低),适合微调普通业务进程的io优先级。BE=best-effort(尽力服务调度,linux 默认io调度分类)。
-c 3最安全的低优先级模式,进程仅在磁盘完全空闲、无核心业务读写时运行。能够适配备份、迁移、日志清理等后台任务,零影响线上业务,这个是我们日常运维使用最多的。
三、ionice的实战命令
1、查看进程io优先级
#查看单个进程io优先级ionice -p 进程pidionice -p 5152

2、新建任务,直接限制低io优先级
执行后台任务时提前降级,从根源避免io抢占:
#低优先级打包备份ionice -c 3 tar -zcvf data_backup.tar.gz /data/ceshi#低优先级本地目录同步ionice -c 3 rsync -av /data /backup#低优先级跨机器远程同步ionice -c 3 rsync -av /data root@xxx.xxx.xxx.xxx:/backup#低优先级过期日志删除,大量小文件删除耗ioionice -c 3 rm -rf /var/log/old/*



无需重启进程,在线修复卡顿进程,适配线上紧急调优:
#将指定pid进程改为空闲io优先级ionice -c 3 -p 6757#将进程设为默认模式最低权重,彻底让步资源ionice -c 2 -n 7 -p 6757#核心业务进程拉高io优先级,优先抢占资源ionice -c 2 -n 0 -p 6757



-c 2:best-effort默认io调度类别(绝大多数业务默认类别);-n 7:BE分级范围0(最高)~7(最低),n7是BE模式下io权重底线;-c2 -n7(BE最低)有业务io时优先业务;系统轻微空闲就可以跑自己,不会卡死,适合日常备份、同步;-c3 idle(空闲级):必须整机磁盘完全无其他 BE/RT IO 才允许读写,io打满时进程长期停滞,适合非紧急离线任务。
场景1:定时备份不影响早高峰业务
做运维的都知道,我们很多备份任务在凌晨跑,如果备份任务比较大,有时候凌晨备份任务未跑完,会和早高峰业务抢io,导致早高峰接口卡顿。在定时任务中加入ionice,全程静默运行:
0 1 * * * ionice -c 3 /usr/bin/backup.sh场景2:全天候数据迁移、文件同步
常规数据迁移必须避开业务高峰期,限制io优先级后,可7×24小时随时迁移,不影响线上服务。
#后台长驻同步nohup nice -n19 ionice -c2 -n7 rsync -av 源 目标 &
场景3:日志批量清理、压缩
日志批量操作易产生io峰值,拖慢数据库读写。统一配置空闲优先级,避免突发卡顿。
临时定时清理ionice -c3
30 2 * * * ionice -c3 find /var/log -name "*.old" -delete五、日常注意事项
1. 严禁滥用实时模式:-c 1优先级过高,极易造成业务雪崩,日常运维禁用;
2. 适用范围有限:仅对普通文件io生效,对数据库裸设备直写、绕过系统调度的操作无明显效果;
3. 优先级临时生效:进程、服务器重启后配置失效,长期使用需写入脚本或定时任务;
4. 最佳调优组合:nice限制cpu+ionice限制io,双重管控后台任务,服务器稳定性大幅提升。
大多数运维只会用常规命令排查问题,而ionice 是解决隐性io卡顿的最优解。它没有复杂配置,却能精准解决线上高频疑难问题,是资深运维的必备细节技巧。如果觉得文章对你的运维工作有帮助,记得点赞加收藏。