首页 > 运维 > linux运维 > 正文

Linux nice和renice命令用法详解

P粉602998670
发布: 2025-09-07 10:48:01
原创
504人浏览过
nice和renice用于调整进程优先级,niceness值从-20到19,值越低优先级越高,影响CPU时间分配,普通用户只能调高自身进程优先级,root可任意调整,通过ps、top或/proc查看,renice修改运行中进程优先级,需谨慎操作避免系统不稳定。

linux nice和renice命令用法详解

Linux系统里,

nice
登录后复制
renice
登录后复制
命令是用来调整进程运行优先级的,说白了,就是告诉操作系统,哪些任务更重要,可以多给点CPU时间,哪些不那么急,可以放慢点跑。
nice
登录后复制
用来启动一个新进程时设定其优先级,而
renice
登录后复制
则是针对已经在运行的进程进行优先级调整。这对于管理系统资源,确保关键服务流畅运行,同时又不至于让后台任务把系统拖垮,简直是必备技能。

解决方案

在我看来,掌握

nice
登录后复制
renice
登录后复制
,核心在于理解“niceness”这个概念。它不是直接指定CPU占用百分比,而是一个相对的优先级值,范围从 -20(最高优先级,最“不nice”)到 19(最低优先级,最“nice”)。默认情况下,大多数进程的niceness值是 0。这个值越大,进程就越“nice”,意味着它会更礼貌地让出CPU时间给其他进程;值越小,就越“不nice”,它会更积极地抢占CPU。

nice
登录后复制
命令的使用

当你需要启动一个耗时但非紧急的任务时,比如一个大数据分析脚本或者文件备份,就可以用

nice
登录后复制
来降低它的优先级。这样它就不会霸占所有CPU资源,影响你正在使用的交互式应用。

基本语法:

nice -n <niceness_值> <要执行的命令>
登录后复制

举个例子,我要备份一个大目录,但不想让它拖慢我的开发环境:

nice -n 15 tar -zcvf /backup/my_data.tar.gz /home/user/data
登录后复制

这里,

tar
登录后复制
命令会以 niceness 值 15 运行,这意味着它会比默认优先级的进程获得更少的CPU时间。如果你不指定
-n
登录后复制
参数,
nice
登录后复制
默认会以 niceness 值 10 启动命令。

需要注意的是,普通用户只能将 niceness 值调高(即降低优先级,让进程更“nice”)。如果你想把 niceness 值调低(提高优先级,让进程更“不nice”),那就需要

root
登录后复制
权限。这是为了防止普通用户恶意地启动高优先级进程,从而导致系统资源被滥用。

renice
登录后复制
命令的使用

有时候,一个进程已经跑起来了,你才发现它太占用资源,或者它突然变得很重要,需要更高的优先级。这时

renice
登录后复制
就派上用场了。

基本语法:

renice <niceness_值> -p <进程ID>
登录后复制
或者针对某个用户的所有进程:
renice <niceness_值> -u <用户名>
登录后复制
或者针对某个组的所有进程:
renice <niceness_值> -g <组名>
登录后复制

比如,我发现一个名为

data_processor
登录后复制
的程序(PID是 12345)正在疯狂消耗CPU,我想把它优先级调低一点:
renice 10 -p 12345
登录后复制

同样地,

renice
登录后复制
的权限规则和
nice
登录后复制
类似:普通用户只能调高自己进程的 niceness 值,
root
登录后复制
用户可以调整任何进程的 niceness 值,包括调低。

在我日常工作中,这俩命令简直是救星。比如,跑一个大型的

make -jN
登录后复制
编译任务,如果直接跑,我的桌面环境可能就卡死了。但如果
nice -n 10 make -jN
登录后复制
,那感觉就完全不一样了,编译照常进行,我还能流畅地写代码、查文档。

Linux进程优先级如何影响系统性能?

进程优先级,或者说我们这里的niceness值,它直接影响的是Linux内核调度器(scheduler)如何分配CPU时间片。你可以把CPU想象成一个非常忙碌的医生,而进程就是排队看病的病人。优先级高的病人,医生会优先看他,或者给他更长的诊疗时间。

当系统中有多个CPU密集型进程同时运行时,调度器会根据它们的优先级来决定谁获得CPU的使用权,以及获得多长时间。一个低niceness值(高优先级)的进程,会比高niceness值(低优先级)的进程获得更多的CPU时间片,或者更频繁地被调度执行。这意味着它能够更快地完成计算任务。

法语写作助手
法语写作助手

法语助手旗下的AI智能写作平台,支持语法、拼写自动纠错,一键改写、润色你的法语作文。

法语写作助手 31
查看详情 法语写作助手

这种机制对系统性能的影响是显而易见的。如果你有一个交互式的桌面环境或者一个对外提供服务的Web服务器,它们的响应速度对用户体验至关重要。如果此时一个后台数据分析任务以默认甚至更高的优先级运行,它可能会抢占大量CPU资源,导致你的桌面卡顿,或者Web服务器响应变慢,用户会明显感觉到延迟。

反之,如果我们将这些后台任务的优先级调低(提高niceness值),它们就会“礼让”给前端应用和服务,从而保证了交互式体验和服务的可用性。这并不是说低优先级的进程就完全不运行了,而是它会在高优先级进程不那么忙碌的时候,或者在它被调度器“轮到”的时候,获得CPU时间。整个系统的吞吐量可能不会有太大变化,但用户感知的响应速度会截然不同。所以,这更多是一种“公平”的调度策略,确保关键任务能及时响应,非关键任务也能有序推进。

nice
登录后复制
值与实际CPU使用率有何关联?

这里有个常见的误解,就是认为

nice
登录后复制
值直接限制了进程的CPU使用率,比如 niceness 19 的进程就只能用 5% 的CPU。但事实并非如此。
nice
登录后复制
值影响的不是进程能用的CPU百分比上限,而是当多个进程竞争CPU资源时,调度器如何分配这些资源。它是一种相对的优先级,而不是绝对的资源限制。

举个例子,如果你的系统上只有一个CPU密集型进程在运行,即使它的 niceness 值是最高的 19,它仍然会占用几乎 100% 的CPU。因为没有其他进程来和它竞争,调度器自然就会把所有可用的CPU时间都给它。

但是,一旦有另一个进程(比如一个 niceness 值为 0 的进程)也开始竞争CPU,那么 niceness 值为 0 的进程就会获得更多的CPU时间片,而 niceness 值为 19 的进程获得的CPU时间就会相应减少。你可以想象成一个蛋糕,高优先级的进程能分到更大块,低优先级的进程只能分到小块。但如果只有一个人吃蛋糕,无论他优先级高低,他都能吃掉整个蛋糕。

所以,

nice
登录后复制
值与实际CPU使用率的关联是间接的、相对的。它在多任务并发的场景下才真正体现出其价值。在
top
登录后复制
htop
登录后复制
这样的工具里,你可能会看到一个高 niceness 值的进程CPU使用率较低,那通常是因为有其他更高优先级的进程正在活跃地使用CPU。如果那些高优先级进程进入等待状态(比如等待I/O),那么低优先级的进程就有机会获得更多的CPU时间,其CPU使用率也可能暂时飙升。这正是调度器在动态平衡的结果。

如何查看和修改运行中进程的
nice
登录后复制
值?

要查看一个正在运行进程的

nice
登录后复制
值,有几种常用的方法,都非常直观:

1. 使用

ps
登录后复制
命令:
ps -l
登录后复制
可以列出当前终端下所有进程的详细信息,其中
NI
登录后复制
列就是 niceness 值。
ps -eo pid,ni,cmd
登录后复制
这种方式更简洁,只显示进程ID、niceness值和命令。 例如:
ps -eo pid,ni,cmd | grep "my_process"
登录后复制

2. 使用

top
登录后复制
htop
登录后复制
命令:
这是我最常用的方法,实时性强。 直接在终端输入
top
登录后复制
htop
登录后复制
,你会看到一个动态更新的进程列表。在
top
登录后复制
的输出中,
NI
登录后复制
列就显示了每个进程的 niceness 值。
htop
登录后复制
同样有
NI
登录后复制
列,而且界面更友好,支持鼠标操作。

3. 查看

/proc
登录后复制
文件系统: 每个运行中的进程在
/proc
登录后复制
目录下都有一个对应的子目录,以进程ID命名。进程的详细信息存储在这些目录下的文件中。 要查看特定进程(例如PID为 12345)的 niceness 值,可以查看
/proc/12345/stat
登录后复制
文件。这个文件包含了大量进程状态信息,niceness 值通常在第 18 个字段。
cat /proc/12345/stat | awk '{print $18}'
登录后复制

修改运行中进程的

nice
登录后复制
值:

修改运行中进程的

nice
登录后复制
值,就得用到前面提到的
renice
登录后复制
命令。

针对单个进程:

renice <新的niceness_值> -p <进程ID>
登录后复制
例如,我发现我的
nginx
登录后复制
进程(PID 54321)偶尔会响应慢,我想稍微提高它的优先级(降低 niceness 值),让它更“不nice”一点:
sudo renice -5 -p 54321
登录后复制
这里我用了
sudo
登录后复制
,因为我将 niceness 值从默认的 0 降到了 -5,这需要
root
登录后复制
权限。

针对某个用户的所有进程:

renice <新的niceness_值> -u <用户名>
登录后复制
比如,我发现用户
devuser
登录后复制
启动了太多高CPU占用的进程,我想把他的所有进程优先级都调低一点:
sudo renice 10 -u devuser
登录后复制

针对某个组的所有进程:

renice <新的niceness_值> -g <组名>
登录后复制
这个不常用,但当某个组的用户共享资源,需要统一管理时会有用。

在使用

renice
登录后复制
时,我个人会特别小心。如果你不清楚一个进程的重要性,随意调低它的 niceness 值(提高优先级)可能会导致系统不稳定,甚至卡死。比如,不小心把系统关键进程(如
systemd
登录后复制
kworker
登录后复制
)的 niceness 值调得过低,可能会让它们过度抢占资源,导致其他服务无法正常运行。反之,如果把一个关键服务的 niceness 值调得过高(降低优先级),服务响应会变慢,甚至超时。所以,在生产环境中操作,一定要慎之又慎,最好先在测试环境验证。

以上就是Linux nice和renice命令用法详解的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号