Linux命令拾遗-top中的%nice是啥

发布时间:2026/9/18 4:01:19

Linux命令拾遗-top中的%nice是啥 简介#这是Linux命令拾遗系列的第八篇本篇主要介绍top命令中nice%这个指标的含义以及进程优先级相关内容。在各种查看CPU使用率的工具中(如top)一般都有us%、sy%、ni%等us%与sy%含义是比较容易理解的一个是用户态CPU使用率一个是内核态CPU使用率。但ni%就比较晦涩难懂了它代表被调整过nice值的进程占用的CPU使用率很难理解对不对来看看下面的例子。调整进程nice值#首先我们使用stress命令起2个进程对CPU制造一些压力如下# 起2个吃CPU的后台进程 $ stress -c 2 # 查看两个stress进程进程号为194022、194022 $ pstree -Tp $$ bash(193921)─┬─pstree(194101) └─stress(194017)─┬─stress(194022) └─stress(194023)由于我机器是多核的操作系统会将两个stress进程调度到两个核上为了达到效果我们将这2个进程绑定到1号核上运行如下# 绑定2个stress进程到CPU的1号核上 $ taskset -pc 1 194022 $ taskset -pc 1 194023 # 然后使用top查看如下图 $ top可以看到此时%Cpu1是占满的100%两个stress进程各占50%这很好理解两个同样吃CPU进程跑在一个核上大家各分一半嘛这里需要注意一下进程的PR与NI列这两个都代表了进程的优先级PR是内核调度时使用的优先级(priority)默认20值越大优先级越低而NI是开放给用户调整的优先级(nice)默认0nice值越大则进程会表现得越谦让(nice)先让别的进程获得CPU表现为优先级越低。如下我们通过renice命令调整194023进程的nice值为5以降低它的优先级$ renice -n 5 -p 194023 $ top可以发现现在%Cpu1的us是75.7ni是24.3没被调整nice的进程194022的%CPU是75.1而调整了的进程194023的%CPU是24.6同时NI列从0变成了5PR列从20变成了25可以发现%ni的值24.3几乎等于被调整过nice值进程的CPU使用率即24.6。再看看我开头说的ni%的定义ni%代表被调整过nice值的进程占用的CPU使用率现在感觉这句话是不是再清楚不过了被调整了nice值的进程会从us%中分离出来单独显示这样当一批非常吃CPU的进程被调整nice值后调整的人就能非常清楚的知道这些进程现在占用多少CPU了。如下再通过renice命令调用194023进程的nice值为19这是nice值能设置的最大值$ renice -n 19 -p 194023 $ top可以发现194023这个进程CPU使用率更低了且%Cpu1的ni也更低了并且NI变成了19PR变成了39。PR与NI#上面可以看到PR与NI好像满足这样一种等式关系PR 20 NI那么为什么Linux要设计这两套优化级呢其实在进程执行的过程中就算你调整了进程NI值导致PR变化PR还是可以再次由CPU调度器根据需要动态调整的在这种情况下上面的公式就不成立了。并且在内核代码里PR才是CPU调度器真正使用的优化级而NI只是开放给用户修改的。另外NI值是给普通进程使用的范围是[-20 ~ 19]共39个级别对应PR就是[0 ~ 39]。而PR的取值范围可以是[-100 ~ 39]共139个级别其中[-100, -1]是给实时进程用的。所以在Linux中PR大于0是普通进程小于0是实时进程。注在top中会看到 PR rt 的进程这个rt等同于-100可以发现对于普通进程不管用户怎么调整NI值进程的PR都不会低于0也就是保证所有实时进程的优先级都要大于普通进程像Linux中的一些内核进程就是实时进程(如migration/0)必须保证他们被优先执行。如下在Linux中可以通过chrt命令查看内核支持的实时进程调度策略$ chrt -m SCHED_OTHER min/max priority : 0/0 SCHED_FIFO min/max priority : 1/99 SCHED_RR min/max priority : 1/99 SCHED_BATCH min/max priority : 0/0 SCHED_IDLE min/max priority : 0/0 SCHED_DEADLINE min/max priority : 0/0是的你会发现SCHED_FIFO/SCHED_RR策略都有[1,99]共99个实时优先级(real_time_priority)可用它和PR的关系是PR -1 - real_time_priority。如下之前通过增大NI值而降低了优先级的194023进程我再把它修改为实时进程# 设置194023进程为实时进程调度策略为SCHED_RR实时优先级为10PR -1 -10 -11 $ sudo chrt --rr --pid 10 194023 # 查看实时优先级 $ chrt -p 194023 pid 194023s current scheduling policy: SCHED_RR pid 194023s current scheduling priority: 10 # 再看CPU使用率 $ top可以看到194023被调整为实时进程后把CPU占满了没有给同核心运行的普通进程194022留下任何CPU时间。所以实时进程的调度是抢占式的只要其不结束低优先级进程完全没有机会使用CPU而对于普通进程而言多少会留一点CPU时间给其它低优先级的普通进程使用的。另外使用ps -l也可以查看进程的PR与NI如下$ ps -lp 194022 194023 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 1 R 0 194022 194017 97 80 0 - 964 - ? 1943:32 stress -c 2 1 R 0 194023 194017 2 49 - - 964 - ? 52:08 stress -c 2看PRI这一列可以发现194022在top中是20在ps中是80而194023在top中是-11在ps中是49它们都相差60。是的他们含义是一致的只是显示的基准值不同而已top中0以下代表实时进程而ps -l中60以下代表实时进程。
延伸阅读

更多相关文章

2026/9/18 4:01:19

大模型系统提示词泄露全解析:从原理到防御的实战指南

1. 先聊聊这个标题到底在说什么如果你最近在逛技术社区、刷 AI 相关的资讯,大概率会频繁撞见system_prompts_leaks这个关键词。它并不是某个具体项目的代号,而是指过去一年里在 LLM 应用领域掀起巨浪的一类现象:大语言模型的系统提示词&#…

2026/9/18 4:46:20

三跨线路云台实时视频录像监测装置选型部署与运维指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 4:46:20

oh-my-hermes:Hermes 智能体部署、配置与 WebUI 管理增强指南

给大家看个有点特别的思路。最近我在折腾 Hermes 这个智能体运行框架的时候,发现网上有不少人跟我一开始一样——照着 README 把服务跑起来了,结果后面真正用起来才发现一堆破事:模型配完一个换一个、API Key 散落在各个配置文件里、终端里敲…

2026/9/18 4:46:20

基于Hadoop的租车网站数据分析系统设计与实现

毕业设计拿到这个题目的时候,我第一反应是大数据组件搭建会很麻烦。但真正做完回头看,“基于Hadoop的租车网站的数据分析系统”其实是性价比很高的题目——它把Hadoop、数据分析、Web开发、可视化四块内容串在一起,既能体现技术深度&#xff…

2026/9/18 4:46:20

UDP转发架构实战:CNS/CLNS/CLNC三层部署与调优指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 4:41:20

Colibri语料模式挖掘:多词表达抽取与n-gram实战

做多词表达抽取那几年,我踩的第一个大坑不是算法,而是"太相信自己手写的规则"。当时手上有几十万条行业问答文本,任务是找领域里的固定搭配和术语。我一开始的做法很朴素:停用词表加正则,再配一份人工维护的…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/18 0:01:09

Google Colab 实战:运行模型、数据加载与报错排查

1. 为什么我劝你先搞懂 Colab 的运行模型1.1 Colab 到底是什么,跟本地跑代码差在哪Google Colab 简单说就是一台跑在浏览器里的 Linux 虚拟机,你打开一个 Notebook,背后就连上了一台带 GPU 的远程机器。你在单元格里敲的每一行 Python&#x…

2026/9/18 0:01:09

C语言数据类型与表达式详解

1. C语言数据与数据类型概述在C语言编程中,数据是程序处理的核心对象。理解数据的分类和特性是掌握C语言的基础。C语言中的数据主要分为四大类:常量、变量、表达式和函数。这些数据类型构成了C语言程序的基本元素,每种类型都有其独特的特性和…

2026/9/18 0:01:09

SQL时间字段指定时间段查询:区间语义、索引与时区避坑

上周排查一个线上问题&#xff0c;用户反馈"昨天的订单一条都没查到"&#xff0c;但数据库里明明躺着两千多条。最后定位下来&#xff0c;不是数据丢了&#xff0c;也不是接口挂了&#xff0c;而是那个查询条件把时间段写成了> 2024-05-20 00:00:00 AND < 2024…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码