top
时,我可以看到以下示例输出: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4586 ipc-adm+ 20 0 1303900 605152 92844 S 30,6 29,3 3:52.88 firefox
3985 ipc-adm+ 20 0 258588 124508 63072 S 12,2 6,0 0:40.04 compiz
3092 root 20 0 172392 56164 25980 S 6,1 2,7 0:30.13 Xorg
我感兴趣的值有两个:
PR
(优先级)和NI
(尼斯) 。如果我理解我已经正确发现的内容,那么两者都将确定一个进程与其他进程相比将获得多少CPU时间。但是,这些值之间有什么区别?
#1 楼
好的值是用户空间,优先级PR是Linux内核使用的进程的实际优先级。在linux系统中,优先级为0到139,其中实时为0到99,用户为100到139。好的值范围是-20到+19,其中-20最高,默认值为0,+ 19最低。
好的值和优先级之间的关系是: />
因此,
PR = 20 + (-20 to +19)
的值是0到39,代表100到139。根据高级手册:
PR-优先级任务的调度优先级。如果您在此字段中看到
'rt',则表示任务正在“实时”下运行。
计划优先级。 NI-不错的价值任务的不错的价值。 nice
负值表示较高的优先级,而nice值正数表示优先级较低。该字段中的零仅表示在确定任务的调度能力时不会调整优先级>
编辑:
默认情况下,在Linux中启动程序时,程序的启动优先级为'0'。但是,您可以通过以下两种方法之一来更改程序的优先级。
您可以使用
以所需的优先级启动程序。
PR = 20 + NI
还可以使用
更改已经运行的进程的优先级
nice -n nice_value program_name
#2 楼
什么是优先级,为什么我要关心?谈论进程优先级时,只不过是管理处理器时间。处理器或CPU就像人类同时处理多个任务。有时我们可以有足够的空间来进行多个项目。有时我们一次只能专注于一件事。有时,一些重要的事情突然冒出来,我们希望全力以赴地解决问题,同时将次要的任务放在后面的刻录机上。
在Linux中,我们可以设置CPU遵循的指导原则正在查看其必须完成的所有任务。这些准则称为好感或好的价值。 Linux的友好程度从-20到19。数字越小,任务获得的优先级越高。如果niceness值是高数字(例如19),则该任务将被设置为最低优先级,并且CPU将在有机会时对其进行处理。默认的nice值为零。
通过使用此比例,我们可以更适当地分配CPU资源。可以将不重要的较低优先级程序设置为较高的值,而可以将诸如守护程序和服务之类的高优先级程序设置为获得更多CPU的关注。您甚至可以为特定用户的所有进程提供较低的价值,以便限制他们减慢计算机核心服务的能力。
源
设置使用
nice
的新进程的优先级,例如nice -n 10 firefox
现有进程的
renice 10 -p $(pgrep firefox)
设置优先级
<0
,您需要sudo
,例如: > renice -1 -p $(pgrep firefox)
renice: failed to set priority for 2769 (process ID): Permission denied
其他示例
为特定用户放弃所有正在运行的进程
% ps -o pid,comm,pri,nice -p $(pgrep firefox)
PID COMMAND PRI NI
2769 firefox 19 0
% renice 10 -p 2769 # note, we don't need sudo here
2769 (process ID) old priority 0, new priority 10
% ps -o pid,comm,pri,nice -p $(pgrep firefox)
PID COMMAND PRI NI
2769 firefox 9 10
% sudo renice -19 -p 2769
2769 (process ID) old priority 10, new priority -19
% ps -o pid,comm,pri,nice -p $(pgrep firefox)
PID COMMAND PRI NI
2769 firefox 38 -19
评论
在您的示例中,renice 10也可以在没有sudo的情况下工作,对吗?您能否添加一个示例来使特定用户的所有流程更加美观?如果其他人同时登录并且正在运行一些不必要但占用资源的进程(例如Firefox中暂停的Flash游戏,小兄弟会做这些事情...:-/),那实际上将非常有用。
–Byte Commander♦
2015年8月5日,12:25
@ByteCommander完成=)
– A.B.
2015年8月5日13:02
一段时间后,如何恢复该用户的旧值?将其设置回0?这不会考虑到某些进程之前可能具有不同的niceness值。有没有简单的可能性可以做到这一点?
–Byte Commander♦
15年8月5日,13:04
@ByteCommander不,这并不简单。您使用0或…都有问题;)
– A.B.
2015年8月5日13:11
在renice -19之后,ps的结果为:PRI:38,NI:-19,但是最上面的是PR:1,NI -19为什么?
–唤醒
18年2月20日在16:27
#3 楼
简短回答PR是优先级。 PR越低,该过程的优先级越高。 /> 19)
用于实时过程:
PR = 20 + NI
(实时优先级范围从1到99)
长答案
有2种类型的过程,正常的和实时。
对于普通的(并且仅针对那些),nice的应用如下:
尼斯
“尼斯”的标度从-20变为19,而-20是最高优先级,而19是最低优先级。优先级的计算方法如下:
其中NI为优先级,PR为优先级。正如我们所看到的,-20实际上映射为0,而19映射为39。
默认情况下,程序的nice值为0,但是root用户可以使用指定的nice启动程序通过使用以下命令获取值:
PR = 20 + NI
实时
我们可以走得更远。好优先级实际上用于用户程序。 UNIX / LINUX总体优先级的范围为140个值,而nice值使进程可以映射到范围的最后一部分(从100到139)。该公式使从0到99的值不可用,这将对应于负PR级别(从-100到-1)。为了能够访问这些值,该过程应声明为“实时”。
LINUX环境中有5种调度策略,可以使用以下命令显示:
nice -n <nice_value> ./myProgram
将显示以下列表:
chrt -m
调度过程可以分为2组,正常调度策略(1到3)和实时调度策略(4和5)。 />实时流程始终比普通流程具有更高的优先级。可以使用以下命令来调用实时过程(示例是如何声明SCHED_RR策略):
1. SCHED_OTHER the standard round-robin time-sharing policy
2. SCHED_BATCH for "batch" style execution of processes
3. SCHED_IDLE for running very low priority background jobs.
4. SCHED_FIFO a first-in, first-out policy
5. SCHED_RR a round-robin policy
要获得实时过程的PR值,请使用以下公式:
chrt --rr <priority between 1-99> ./myProgram
其中
PR = - 1 - real_time_priority
对应于1到99之间的优先级。因此,该过程的优先级高于其他过程将被称为数字99。需要注意的是,对于实时过程,不会使用nice值。
要查看当前的“尼斯”和PR值,可以执行以下命令:
PR = -1 - rt_prior
显示以下输出:
在该图中显示了PR和NI值。最好注意PR值-51与实时值相对应的过程。也有一些过程的PR值表示为“ rt”。该值实际上对应于-100的PR值。
评论
您是说,它们几乎是相反的东西(两者都表示优先级),但是可以将优先级设置为负数,以使具有优先级的任务避开高优先级任务? (即,允许其他访问资源很好吗?或者这只是让我感到困惑?
–马克·柯比(Mark Kirby)
15年8月5日在9:59
我的意思是一个示例,两个任务的pr均为20,所以相等,任务一的ni为0,任务二的ni为20,因此,这意味着任务二将为任务一放弃资源因为它更好
–马克·柯比(Mark Kirby)
15年8月5日在10:05
据我所知,优先级计算为PR = 20 + NI。因此,任务一优先级= 20 +0。友善的最大值+19
– pl_rock
2015年8月5日在10:36
PR = 20 + NI最大值可以是39。实际上,在Linux系统中,有139个优先级,其中0到99是实时优先级,对于用户有100到139。因此,NI值-20至+19映射为优先级100至139。你可以调整的。但是内核仍然不确定是否更改NI值会改变优先级,NI值只是对内核的建议。内核有一段时间忽略它
– pl_rock
15年8月5日在10:50
那么PR和NI实际上是相等的,因为它们只是一个不同的偏移量?那为什么我们同时拥有这两个价值观?您还可以添加设置进程的优美度<0需要根权限。
–Byte Commander♦
2015年8月5日,12:22