我使用“top”命令时遇到了 nice 值。我知道优先级以及 nice 值如何表示进程的优先级。但我似乎无法弄清楚“niced”或“un-niced”是什么意思。
答案1
这些术语只是指进程的默认 nice 值是否已更改。“niced”进程是指已使用命令运行的进程nice
(或其 nice 值已被 更改renice
),而“un-niced”进程是指尚未使用 运行的进程nice
。常规进程(未使用 运行nice command
或其 nice 值随后未被 更改的进程renice PID
)的默认 nice 值为 0。因此,“un-niced”进程是 nice 值为 0 的进程,“niced”进程是 nice 值 != 0 的进程。
nice 值并不表示进程的优先级,而是表示进程的 niceness。您可以在输出中看到这两个值top
:
$ top -b -n1 | head
top - 15:23:10 up 20:59, 1 user, load average: 1.41, 1.75, 1.88
Tasks: 222 total, 1 running, 221 sleeping, 0 stopped, 0 zombie
%Cpu(s): 14.2 us, 7.9 sy, 0.0 ni, 76.6 id, 0.6 wa, 0.0 hi, 0.6 si, 0.0 st
GiB Mem : 7.791 total, 3.082 free, 3.862 used, 0.846 buff/cache
GiB Swap: 16.000 total, 15.793 free, 0.207 used. 3.485 avail Mem
PID USER PR NI VIRT RES %CPU %MEM TIME+ S COMMAND
1591 terdon 20 0 1605.1m 362.3m 18.8 4.5 285:46.34 S chromium
1754 terdon 20 0 790.8m 184.5m 18.8 2.3 405:54.21 S chromium
1186 terdon 20 0 1992.8m 459.6m 12.5 5.8 119:31.59 S cinnamon
^^ ^^
| |---------> niceness
|-------------> priority
如果我现在为其中一个铬进程设置一个好值,你会看到差异:
$ renice 10 1591
1591 (process ID) old priority 0, new priority 10
$ top -b -n1 | head
top - 15:24:56 up 21:01, 1 user, load average: 0.89, 1.48, 1.77
Tasks: 225 total, 1 running, 224 sleeping, 0 stopped, 0 zombie
%Cpu(s): 14.2 us, 7.9 sy, 0.0 ni, 76.6 id, 0.6 wa, 0.0 hi, 0.6 si, 0.0 st
GiB Mem : 7.791 total, 3.033 free, 3.908 used, 0.849 buff/cache
GiB Swap: 16.000 total, 15.793 free, 0.207 used. 3.439 avail Mem
PID USER PR NI VIRT RES %CPU %MEM TIME+ S COMMAND
1591 terdon 30 10 1605.1m 362.6m 23.5 4.5 286:10.40 S chromium
1754 terdon 20 0 790.8m 184.5m 18.8 2.3 405:54.21 S chromium
1186 terdon 20 0 1992.8m 459.6m 12.5 5.8 119:31.59 S cinnamon
进程的 nice 值用于确定其优先级,但进程的实际优先级(列PR
)与其 nice 值不同。简而言之,友善值决定了进程对系统中其他进程的“友好程度”。如果进程非常友好(高友好度值),它将“礼貌”并允许其他进程优先使用更多 CPU 时间(换句话说,它将具有较低的优先级)。如果进程不太友好,它将尝试为自己获取尽可能多的 CPU 时间(因此它将具有较高的优先级)。
更奇怪的是,优先级值的范围是 -20(最高)至+20(最低)和 niceness 值范围从 19(最高善良,所以最低优先级)设置为 -20(最低善良,所以最高优先事项)。
我不知道将 niceness 值转换为优先级的具体机制。细节似乎取决于内核版本和具体实现(请参阅“注释”部分这里)。但是,粗略地近似一下,你可以将其视为:
Priority = DefaultPriority + Niceness
为了说明这一点,我将启动 3 个脚本实例foo.sh
(仅运行一个sleep
命令),它们具有不同的优缺点值:
foo.sh & # default
nice -n 10 foo.sh
nice -n 15 foo.sh
sudo nice -n -10 foo.sh
最后一个使用,sudo
因为只有 root 才能启动具有负(高)优先级的进程。现在,让我们看看它们的优先级是多少:
$ top -b -n1 | grep foo.sh
21958 terdon 20 0 13.3m 2.7m 0.0 0.0 0:00.00 S foo.sh
22148 terdon 30 10 13.3m 2.7m 0.0 0.0 0:00.00 S foo.sh
22181 terdon 35 15 13.3m 2.7m 0.0 0.0 0:00.00 S foo.sh
23480 root 10 -10 13.3m 2.6m 0.0 0.0 0:00.00 S foo.sh
如上所示,优先级等于 niceness 值与默认优先级 20 的总和。