0

0

Linux nice和renice命令用法详解

P粉602998670

P粉602998670

发布时间:2025-09-07 10:48:01

|

528人浏览过

|

来源于php中文网

原创

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  <要执行的命令>

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

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  -p <进程ID>
或者针对某个用户的所有进程:
renice  -u <用户名>
或者针对某个组的所有进程:
renice  -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智能写作助手
蛙蛙写作——超级AI智能写作助手

蛙蛙写作辅助AI写文,帮助获取创意灵感,提供拆书、小说转剧本、视频生成等功能,是一款功能全面的AI智能写作工具。

下载

这种机制对系统性能的影响是显而易见的。如果你有一个交互式的桌面环境或者一个对外提供服务的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 值调得过高(降低优先级),服务响应会变慢,甚至超时。所以,在生产环境中操作,一定要慎之又慎,最好先在测试环境验证。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

229

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

498

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

498

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

227

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

333

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3508

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

15

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

2

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

PHP入门到实战消息队列RabbitMQ
PHP入门到实战消息队列RabbitMQ

共22课时 | 1.3万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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