linux性能分析优化之基础指标参数(3) - 进程优先级 cpu nice priority NI PR %ni %nice

查看方式

使用top命令,输出的下半部分信息中的进程信息中,PR列表示进程的优先级(priority),NI列表示进程的nice值。
如下图中,3个进程的PR都为20,NI都为0。

1
2
3
4
5
6
7
8
9
10
top - 19:56:32 up 122 days,  5:03,  1 user,  load average: 0.10, 0.07, 0.01
Tasks: 121 total, 1 running, 120 sleeping, 0 stopped, 0 zombie
Cpu(s): 2.7%us, 4.2%sy, 0.0%ni, 93.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3922456k total, 2580684k used, 1341772k free, 254848k buffers
Swap: 0k total, 0k used, 0k free, 1586028k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4376 root 20 0 1176m 18m 5088 S 2.7 0.5 74:27.06 guard
28847 root 20 0 42228 19m 5480 S 0.7 0.5 953:35.27 consul
12 root 20 0 0 0 0 S 0.3 0.0 12:54.89 events

nice的含义

一般表示为NI

nice用来设置进程的优先级。取值范围为[-20, 19]。值越大,表示对别的进程越友好(越nice嘛),即优先级越低。
nice默认值为0。
子进程会继承父进程的nice值。

为进程设置nice

启动进程时指定nice值

1
2
3
4
# nice -n <nice值> <进程启动命令>
# 举例:
$nice -n 19 stress -c 1
$nice -n -20 stress -c 1

修改已启动进程的nice值

1
#renice -n <新nice值> -p <进程id>

priority的含义

一般表示为PR

进程执行优先级。

在linux内核2.6.23以及之后的版本,PR=NI+20(在linux内核2.6.23之前,PR=NI+20+x,x可以为负数。x是动态调整进程执行优先级的参数。比如说,某个进程有大量的sleep,那么x会降低导致PR降低,导致优先级上升。再比如,某个进程占用了大量CPU时间,那么x会升高导致PR升高,导致优先级下降。)

CPU %ni %nice 使用率的含义

CPU %nice,表示低优先级进程的CPU使用率。
比如我们最上面那张top命令的截图中的第三行,%ni使用率为0.0%

1
2
3
4
# top命令的第三行信息如下
.
Cpu(s): 2.7%us, 4.2%sy, 0.0%ni, 93.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
.

以下我们来验证。我们用stress工具来模拟一个计算型进程。(关于stress工具更详细的描述可以参见我以前写的这篇文章: stress - 系统压力模拟工具 | yoko blog

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 正常启动一个计算型stress进程
$stress -c 1
# top命令输出如下
# Cpu(s): 51.4%us, 3.7%sy, 0.0%ni, 44.6%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
# 由于我的测试机器是双核的,所以用户态CPU使用率在50%左右


# 启动一个低优先级的stress进程
$nice -n 19 stress -c 1
# top命令输出如下
# Cpu(s): 2.5%us, 3.9%sy, 48.1%ni, 45.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
# 可以看到48.1%ni,说明低优先级CPU使用率在50%左右


# 再试试nice设置为1
$nice -n 1 stress -c 1
# top命令输出如下
# Cpu(s): 2.2%us, 3.5%sy, 49.2%ni, 45.0%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
# 可以看到依然使用%ni


# 再试试nice设置为-20
$nice -n -20 stress -c 1
# Cpu(s): 53.1%us, 3.5%sy, 0.0%ni, 43.2%id, 0.2%wa, 0.0%hi, 0.0%si, 0.0%st
# 可以看到使用的是%us

参考链接

原文链接: https://pengrl.com/p/21535/
原文出处: yoko blog (https://pengrl.com)
原文作者: yoko (https://github.com/q191201771)
版权声明: 本文欢迎任何形式转载,转载时完整保留本声明信息(包含原文链接、原文出处、原文作者、版权声明)即可。本文后续所有修改都会第一时间在原始地址更新。

fccxy

0%