前面介绍过ionice,是关于io优先级的,今天介绍的nice是有关cpu优先级调度的。做linux运维的小伙伴,日常肯定遇到过这些头疼场景:
服务器凌晨跑数据库备份、日志打包,cpu被占满,白天业务访问卡顿;
编译代码、大数据分析等高耗cpu任务,抢占核心业务进程资源;
关键监控、告警服务响应变慢,急需提升进程cpu调度优先级。
很多人第一反应是杀进程、限制cpu使用率,其实完全没必要这么做。linux原生自带nice命令就能解决。一行命令就能调整进程cpu优先级,合理分配服务器算力,不用改配置、不用重启服务,是运维排障和日常调度刚需工具!
一、nice的核心功能
linux系统采用动态优先级调度机制,内核根据nice值决定进程获取cpu时间片的多少,nice值越小,进程优先级越高。
1. nice值取值范围
取值区间:-20 ~ 19
默认值:0(系统所有进程默认初始优先级)
最高优先级:-20(最优先抢占cpu)
最低优先级:19(系统空闲时才会分配cpu资源)
2. 权限限制(重中之重)
普通用户:只能调高nice值(降低进程优先级),无法调低,防止普通用户恶意抢占服务器资源;
root用户:可以随意修改所有nice值,既能调高也能调低,自由提升核心进程优先级。
3. 快速查看进程 nice值
日常排查优先级,用top/ps命令一键查看:
#top查看,NI列即为nice值top#ps精准查看指定进程nice值ps -o pid,ni,cmd -p 进程PID
二、nice的基础语法
nice命令仅用于启动新进程时预设优先级,语法比较简单:
nice -n [nice值] 要执行的命令/程序
-n:指定nice优先级数值,可省略-n直接写数值,例如nice -10 command等价nice -n -10 command
三、nice的实战案例
场景 1:后台低优先级任务(最常用,无需root)
适合:日志切割、数据备份、文件压缩、定时脚本、离线数据分析等非核心后台任务,最大限度避免抢占业务cpu。
案例 1:最低优先级打包备份文件
nice -n 19 tar zcf /data/backup/log-$(date +%Y%m%d).tar.gz /var/log/
nice -n 19:降低tar进程cpu调度优先级,打包时尽量不抢占系统资源,适合业务高峰期备份。
案例 2:后台运行耗时脚本,降低cpu占用
nice -n 10 bash /data/ceshi/mem.sh &
备注:普通用户日常运维,推荐统一设置nice值 10~19,安全无风险,不用申请 root 权限。
场景 2:核心业务高优先级任务(需要root权限)
适合:监控进程、告警服务、数据库核心进程、实时接口服务等不能卡顿的关键程序,抢占更多cpu资源,保证响应速度。
案例 1:提升监控服务优先级
sudo nice -n -10 /usr/local/prometheus/prometheus#root用户可以不加sudo
案例 2:高优先级编译程序,加快编译速度
备注:不要随意设置nice值为 - 20,优先级过高会抢占系统内核进程资源,引发服务器死机、命令无响应!日常核心业务设置-5 ~ -10足够了。
场景 3:默认nice值启动进程
不加-n参数,默认nice值 + 10,轻微降低进程优先级:
四、联动renice:修改已经运行的进程优先级
很多时候任务已经启动,不方便重启,这时候nice无能为力,搭配renice 命令,直接修改正在运行的进程优先级。
renice的基础语法
案例
1.将pid为7579的运行中进程,调低优先级(普通用户可用)
ps -o pid,ni,cmd -p 7579renice -5 -p 7579
2.将业务核心进程调高优先级(需要root)
补充:按用户 / 进程组统一调整优先级
#修改某个用户所有进程优先级renice 10 -u nginx#修改某个进程组所有进程优先级renice 5 -g 进程组ID
nice和renice的区别
#nice:启动新进程时设置优先级#renice:修改已运行进程的优先级
nice与cpulimit的区别
#nice:调整优先级,不限制使用率#cpulimit:硬限制 CPU 使用率百分比
五、注意事项
在nice的使用中,有些人经常会产生使用误区:
误区1:nice可以强制限制进程cpu使用率
错误:nice只是调整cpu调度优先级,不是硬限制cpu占用率。
正确:如果需要严格限制进程cpu使用率,搭配cpulimit工具;磁盘io优先级调整用ionice命令。
误区2:普通用户可以调低nice值提升优先级
错误:linux权限机制限制,普通用户执行nice -n -5 command直接报错,必须 sudo提权或者使用root用户。
误区3:优先级越高,性能一定翻倍
错误:nice只针对cpu密集型进程生效;io密集型进程(读写磁盘为主),修改 nice 值几乎没有效果。
生产最佳实践
1. 所有定时备份、日志清理、离线计算脚本,统一加nice -n 19;
2. 业务中间件、数据库进程不要盲目调高优先级,默认0即可;
3. 线上紧急故障,仅临时给关键告警、监控进程调高优先级;
4. 禁止业务程序设置nice=-20,避免系统内核出现紊乱。
六、nice vs ionice区别
nice:cpu优先级调度,如果cpu占用过高,进程抢算力的场景比较适用。
ionice:磁盘io调度优先级,磁盘读写爆满,io卡顿的场景比较适用。
总结起来就是服务器资源调优,cpu卡顿用nice,磁盘卡顿用ionice。
七、总结
nice命令看着简单,却是服务器日常调优、资源隔离的轻量化神器,不用复杂配置、不用重启服务,一行命令就能合理分配cpu资源。
记住核心口诀:数值越小优先级越高,普通用户只能加不能减,后台任务拉满 19,核心业务少加负数,切忌无脑拉满 - 20!
如果你觉得文章对你的运维工作有帮助,记得点赞加收藏。
#运维 #linux运维 #linux实战 #nice