一文辨析,性能分析top命令中进程NI和PR

分析 Linux 服务器性能,首先想到的命令肯定是 top, 通过它,我们可以看到当前服务器资源使用情况和进程运行资源占用情况。

图片

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386   

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1.【接口自动化】目前软件测试的市场行情以及测试人员能力标准。、2.【接口自动化】全面熟练Requests库以及底层方法调用逻辑、3.【接口自动化】接口自动化实战及正则和JsonPath提取器的应用等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click 

在查看进程资源占用情况时,有两列大家是最难区分,PR(priority)进程优先级和 NI(nice)优先级切换等级,都是优先级,有什么区别呢?

如果,仔细观察,还会发现 PR 列的值是:rt 或大于等于 0 的数字;NI 列的值是:[-20, 19]之间的数字,这些又代表什么意思呢?

因为这些问题搞不清,所以这两列很难理解,下面,我就来给大家说说:

🗝️首先,还是老规矩,在不知道 Linux 命令的结果信息是什么意思的时候,可以查看命令的帮助信息,info top 查看帮助

图片

NI  --  Nice ValueThe  nice  value  of  the  task.   A negative nice value meanshigher priority, whereas a positive  nice  value  means  lowerpriority.   Zero  in this field simply means priority will notbe adjusted in determining a task's dispatch-ability.这项任务的优先价值。负的nice值意味着更高的优先级,而正的nice值意味着更低的优先级。该字段中的0表示在确定任务的调度能力时不会调整优先级。

图片

PR  --  Priority 优先事项The scheduling priority of the task.  If you see `rt' in  thisfield, it means the task is running under real time schedulingpriority.Under linux, real time priority is somewhat  misleading  sincetraditionally  the  operating itself was not preemptible.  Andwhile the 2.6 kernel can be made mostly preemptible, it is notalways so.任务的调度优先级。如果在该字段中看到“rt”,则表示任务正在实时调度优先级下运行。在linux下,实时优先级有些误导,因为传统上操作本身是不可抢占的。虽然2.6内核基本上是可抢占的,但并不总是如此。

估计看了帮助,还是有些愣,接下来,我们就来讲解一下:

首先,我们看到,任务列表数量很多,一般都超过了 CPU 的数量,超过了 CPU 的数量的进程,都要使用 CPU,就要排队,排队,有 3 种队列:Deadline 最后期限队列 dl_rq,实时任务队列 rt_rq,cfs 公平队列 cfs_rq. 每种队列中排队的任务比较多,事情就会比较复杂,所以需要有默认的、大家都遵循的‘优先级’,和出现紧急情况,能灵活调整的‘调度策略’。

如:在机场、火车站,排队上机(车),大多数人,都在排队,但是,如果有人快要误点了,这个人一般就是可以进入优先队列,被优先调度进入上机区域,这就是最后期限队列 dl_rq;而老、弱、病、残或 VIP 人,他们又会单独一个队列,一般都可以随进随走,快速通过的,这就是实时队列 rt_rq;其他人,没有特殊身份,就只能在一起排队,先后通过,这就是公平队列 cfs_rq,但,cfs_rq 队列实在太长了,总会有个别特殊情况的吧,对于突发情况,总得有个应对策略吧,所以,就有调度策略。

NI 是代表 nice 的意思,是一个进程用户态的一个概念;PR 代表 priority 优先级,是进程的实际优先级,是进程内核态的一个概念。

 一个进程,就好比一个人。人,总是说 琐事缠身,但是,也会有些自己想做主动做的事情。琐事,可能不需要大脑想很多,就是机械的做,这是 NI;而有些事,需要通过自己大脑思考,主动去做,这是 PR。

对于一个普通任务进程来说,PR 的值等于 NI 的值加 20,即:PR=NI+20, 所以,你就会发现,当进程的 NI 为 0,PR 就是 20;NI 为-20,PR 就是 0. 我们平时启动的一个进程,如果没有特意去指定任务优先级的话,默认情况下,都是普通任务进程,NI 的值为 0。

cfs 公平队列 cfs_rq,它的进程都是普通任务进程。

-20 是 NI 的最小值,也就是说,此进程的用户态拥有最高优先级,进程运行,当需要进行用户态和内核态的转换时,这种,就有着最高的优先级,优先被执行调度。

NI 相当于我们日常琐事,-20,说明你有很多事情没有完成,身体非常累,你现在最要紧的是把事情做完,所以,此时是拥有最高优先级的;0,说明你没事可做,做事的优先级就最低。

 进程列表中 NI 值越低,代表:这个进程在系统所有的进程中拥有最高优先级,会优先被调度,但是,并不代表这个进程将会有大量的进程上下文切换。

图片

 在 top 命令中,CPU 使用情况的数据中,也有一个 ni,这个 ni 是:用户进程空间内改变过优先级的进程占用 CPU 百分比。它是系统所有进程发生了用户态到系统态的调度,一个进程的用户态到另一个进程用户态间的调度,他们总的占用 CPU 时间比。

单个进程 NI 值低,拥有高的优先级,但是,如果这个进程被使用的少,它占用 CPU 的调度时间也会少,对 CPU 的 ni 值影响也会就少。所以,请不要把这两个 ni 强行关联。

对于一个实时任务进程来说,PR 内核态优先级为 rt(Realtime),这种任务,在 CPU 中实时执行。

Deadline 最后期限队列 dl_rq,实时任务队列 rt_rq,这两中队列的进程,都是 实时任务进程 

普通任务进程(cfs 公平队列 cfs_rq),它的调度策略有两种:SCHED_NORMAL, SCHED_BATCH

 SCHED_NORMAL:没什么特殊,就是普通任务使用的调度策略,就是进程使用 CPU 的时间,每次都相等

SCHED_BATCH:后台任务调度策略,不与终端交互

实时任务进程(Deadline 最后期限队列 dl_rq,实时任务队列 rt_rq),它的调度策略有三种:

SCHED_DEADLINE,SCHED_FIFO,SCHED_RR

SCHED_DEADLINE:距离当前时间最近的 deadline 任务优先被调度

SCHED_FIFO:相同优先级的任务,先来先执行;优先级更高的任务,可以插队

SCHED_RR:循环执行,每个任务分配相同时间,相同优先级任务,轮流执行,如果没有执行完,就到队列末尾,再分配时间执行,而优先级高的任务,可以插队抢先执行

三种队列,执行顺序是:Deadline 最后期限队列 dl_rq > 实时任务队列 rt_rq > cfs 公平队列 cfs_rq

实时任务进程,总是会比普通任务进程优先被执行

启动一个进程,默认 NI 为 0,是普通任务进程,也可以通过 nice 或 renice 命令,改变进程优先级 

nice --help
Usage: nice [OPTION] [COMMAND [ARG]...]
Run COMMAND with an adjusted niceness, which affects process scheduling.
With no COMMAND, print the current niceness.  Niceness values range from
-20 (most favorable to the process) to 19 (least favorable to the process).Mandatory arguments to long options are mandatory for short options too.-n, --adjustment=N   add integer N to the niceness (default 10)--help     display this help and exit--version  output version information and exitNOTE: your shell may have its own version of nice, which usually supersedes
the version described here.  Please refer to your shell's documentation
for details about the options it supports.GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'nice invocation'

nice -n 优先级整数 进程命令 可以在启动进程时指定进程用户态的优先级 NI

renice --helpUsage:renice [-n] <priority> [-p|--pid] <pid>...renice [-n] <priority>  -g|--pgrp <pgid>...renice [-n] <priority>  -u|--user <user>...Options:-g, --pgrp <id>        interpret argument as process group ID-n, --priority <num>   specify the nice increment value-p, --pid <id>         interpret argument as process ID (default)-u, --user <name|id>   interpret argument as username or user ID-h, --help             display help text and exit-V, --version          display version information and exitFor more information see renice(1).

注意:nice 的范围是 [-20, 19], 所以在使用这些命令时,优先级整数范围别写错了。

nice 和 renice 命令,可以修改进程的优先级,但是,再怎么改,这个进程还是普通任务进程,如果,你想把一个任务指定为实时任务进程,则使用 chrt 命令

chrt --help
Show or change the real-time scheduling attributes of a process.Set policy:chrt [options] <priority> <command> [<arg>...]chrt [options] --pid <priority> <pid>Get policy:chrt [options] -p <pid>Policy options:策略-b, --batch          set policy to SCHED_BATCH-d, --deadline       set policy to SCHED_DEADLINE-f, --fifo           set policy to SCHED_FIFO-i, --idle           set policy to SCHED_IDLE-o, --other          set policy to SCHED_OTHER-r, --rr             set policy to SCHED_RR (default)Scheduling options:-R, --reset-on-fork       set SCHED_RESET_ON_FORK for FIFO or RR-T, --sched-runtime <ns>  runtime parameter for DEADLINE-P, --sched-period <ns>   period parameter for DEADLINE-D, --sched-deadline <ns> deadline parameter for DEADLINEOther options:-a, --all-tasks      operate on all the tasks (threads) for a given pid-m, --max            show min and max valid priorities-p, --pid            operate on existing given pid-v, --verbose        display status information-h, --help     display this help and exit-V, --version  output version information and exitFor more details see chrt(1).

hrt -f -p 进程id 修改某个进程为实时任务进程,设置进程的调度策略为 SCHED_FIFO,进程用户态优先级 NI 为某个整数

好了,现在对进程的 NI 和 PR 有没有进一步的认识了呢?希望,学有所获!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/21926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

靶形数独

题目描述 小城和小华都是热爱数学的好学生&#xff0c;最近&#xff0c;他们不约而同地迷上了数独游戏&#xff0c;好胜的他们想用数独来一比高低。但普通的数独对他们来说都过于简单了&#xff0c;于是他们向 Z 博士请教&#xff0c;Z 博士拿出了他最近发明的“靶形数独”&am…

企业数字化转型:信息化还是数字化?

面对巨大的数字经济市场&#xff0c;全球大部分企业都开始了数字化转型进程&#xff0c;国内一半以上的企业已经将数字化转型视为下一步发展重点&#xff0c;并制定了清晰的数字化转型战略规划。 但是&#xff0c;相当一部分传统行业&#xff0c;如制造、金融、能源、化工等非数…

Dockerfile面试题(CMD、ENTRYPOINT与RUN命令对比)

目录 Dockerfile面试题 CMD、ENTRYPOINT与RUN命令对比 &#xff08;一&#xff09;CMD命令 &#xff08;二&#xff09;RUN命令 &#xff08;三&#xff09;ENTRYPOINT &#xff08;四&#xff09;RUN和CMD、ENTRYPOINT支持参数形式命令 &#xff1a; Dockerfile面试题 …

【M波段2D双树(希尔伯特)小波多分量图像去噪】基于定向M波段双树(希尔伯特)小波对多分量/彩色图像进行降噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Python pypinyin module 的应用

安装pypinyin module 这个模块主要处理中文拼音可以用来做很多很有趣的事情 如何使用help 函数 将help 函数的输出保存到文件中去 一眼会 import sys import pypinyinwith open(帮助文档.txt,w) as f:sys.stdout f help(pypinyin) 如何查找模块中内置的函数 类 函数 la…

springboot+vue农产品特产商城销售平台_50kf2 多商家

随着我国经济的高速发展与人们生活水平的日益提高&#xff0c;人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下&#xff0c;人们更趋向于足不出户解决生活上的问题&#xff0c;南阳特产销售平台展现了其蓬勃生命力和广阔的前景。与此同时&#xff0c;为解决…

2023年测试岗,手动测试vs自动化测试,“我“该如何抉择...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 在软件测试行业中…

OpenCL编程指南-9.1命令、队列、事件

概述 命令队列是OpenCL的核心。平台定义了一个上下文&#xff0c;其中包含一个或多个计算设备。每个计算设备可以有一个或多个命令队列。提交到这些队列的命令将完成OpenCL程序的具体工作。 在一个简单的OpenCL程序中&#xff0c;提交到一个命令队列的命令会按顺序执行。一个…

windows下mysql的下载与安装

文章目录 1 下载2 安装目录下新建data文件夹和my.ini3 安装4设置密码与远程连接5 配置环境变量6 navicate连接成功 1 下载 官网地址 https://www.mysql.com/点击下载 社区下载 社区服务 选择版本下载 2 安装目录下新建data文件夹和my.ini my.ini 内容如下 [mysql] # 设置my…

【C#学习笔记】内存管理

文章目录 分配内存释放内存GC标记清除算法分代算法 .NET的GC机制有这样两个问题&#xff1a; 官方文档 自动内存管理 自动内存管理是CLR在托管执行过程中提供的服务之一。 公共语言运行时的垃圾回收器为应用程序管理内存的分配和释放。 对开发人员而言&#xff0c;这就意味着…

二次开发了个寂寞之HttpRunnerManager接口测试管理平台

文章目录 一、背景1、二次开发1.1、首页1.2、项目列表1.3、用例列表1.4、新增用例1.5、测试套件1.6、查看报告 二、总结 一、背景 自入职起&#xff0c;就在公司内部引入开源接口测试平台&#xff0c;选一个大家勉强看得懂源码的开源项目&#xff0c;方便后续的二次开发&#x…

【每日一题】—— C. Mocha and Hiking(Codeforces Round 738 (Div. 2))

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

Kotlin~Visitor访问者模式

概念 将数据结构和操作分离&#xff0c;使操作集合可以独立于数据结构变化。 角色介绍 Visitor&#xff1a;抽象访问者&#xff0c;为对象结构每个具体元素类声明一个访问操作。Element&#xff1a;抽象元素&#xff0c;定义一个accept方法ConcreteElement&#xff1a;具体元…

docker 资源限制

目录 1、CPU使用率 2、CPU共享比例 3、CPU周期限制 4、CPU核心限制 5、CPU 配额控制参数的混合案例 6、内存限制 7、Block IO 的限制 8、限制bps 和iops docker资源限制 Docker容器技术底层是通过Cgroup&#xff08;Control Group 控制组&#xff09;实现容器对物理资…

Android 性能调优之bitmap的优化

背景 Android开发中&#xff0c;加载图片过多、过大很容易引起OutOfMemoryError异常&#xff0c;即我们常见的内存溢出。因为Android对单个应用施加内存限制&#xff0c;默认分配的内存只有几M&#xff08;具体视不同系统而定&#xff09;。而载入的图片如果是JPG之类的压缩格…

【unity】Pico VR 开发笔记(视角移动)

【unity】Pico VR 开发笔记&#xff08;视角移动&#xff09; 视角移动是简单的基础功能&#xff0c;这里区别于头显定位获得的小范围位移&#xff0c;是长距离不影响安全边界的位移方式。的常见的位移方式有两种&#xff0c;其一是触发后瞬间传送到指定位置&#xff0c;其次是…

IDEA用Gradle构建项目时,lombok插件无效的解决办法

Lombok 可用来帮助开发人员消除 Java 的重复代码&#xff0c;尤其是对于简单的 Java 对象&#xff08;POJO&#xff09;&#xff0c;比如说getter/setter/toString等方法的编写。它通过注解实现这一目的。 正确使用姿势 一、安装Lombok插件 菜单栏File -> Settings ->…

死锁的发生原因和怎么避免

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 例如&#xff1a;项目场景&#xff1a;示例:通过蓝牙芯片(HC-05)与手机 APP 通信&#xff0c;每隔 5s 传输一批传感器数据(不是很大) 问题描述 死锁&#xff0c;简单来说就是两个或者两个以上的线程在…

翻转卡片游戏(力扣)

题目 在桌子上有 n 张卡片&#xff0c;每张卡片的正面和背面都写着一个正数&#xff08;正面与背面上的数有可能不一样&#xff09;。 我们可以先翻转任意张卡片&#xff0c;然后选择其中一张卡片。 如果选中的那张卡片背面的数字 x 与任意一张卡片的正面的数字都不同&#…

【C语言进阶】数据的存储----整型篇

​ &#x1f341; 博客主页:江池俊的博客 &#x1f4ab;收录专栏&#xff1a;C语言——探索高效编程的基石 &#x1f4bb; 其他专栏&#xff1a;数据结构探索 ​&#x1f4a1;代码仓库&#xff1a;江池俊的代码仓库 &#x1f3aa; 社区&#xff1a;GeekHub &#x1f341; 如果觉…