1. 程式人生 > >20181204進程優先級nice

20181204進程優先級nice

技術 51cto 級別 由於 tro 調度 level rest 超出

進程優先級nice

一.Linux 進程調度及多任務
每個 CPU(或 CPU 核心)在一個時間點上只能處理一個進程,通過時間片技術,Linux 實際能夠運行的進程(和線程數)可以超出實際可用的 CPU 及核心數量。Linux 內核進程調度程序將多個進程在 CPU 核心上
快速切換,從而給用戶多個進程在同時運行的印象。

二.相對優先級 nice
由於不是每個進程都與其他進程同樣重要,可告知進程調度程序為不同的進程使用不同的調度策略。常規
系統上運行的大多數進程所使用的調度策略為 SCHED_OTHER (也稱為 SCHED_NORMAL),但還有其它一些
調度策略用於不同的目的。
SCHED_OTHER 調度策略運行的進程的相對優先級稱為進程的 nice 值,可以有 40 種不同級別的 nice 值。

技術分享圖片

nice 值越高: 表示優先級越低,例如+19,該進程容易將CPU使用量讓給其他進程。
nice 值越低: 表示優先級越高,例如-20,該進程更不傾向於讓出CPU。

三.查看進程的 nice 級別
1.使用 top 查看 nice 級別
NI: 實際 nice 級別
PR: 將 nice 級別顯示為映射到更大優先級隊列,-20 映射到 0,+19 映射到 39

2.使用 ps 查看 nice 級別
[root@tianyun ~]# ps axo pid,command,nice --sort=-nice 自定義顯示進程
[root@tianyun ~]# ps axo pid,command,nice,cls --sort=-nice

TS 表示該進程使用的調度策略為 SCHED_OTHER

四.啟動具有不同 nice 級別的進程
啟動進程時,通常會繼承父進程的 nice 級別,默認為 0。
[root@tianyun ~]# nice -n -5 sleep 6000 &
[root@tianyun ~]# ps axo command,pid,nice |grep sleep
sleep 6000 2652 0
sleep 6000 2660 -5
sleep 7000 2803 0
sleep 8000 2806 -20

sleep 6000 2810 -5
grep sleep 2812 0


[root@tianyun ~]#nice -n -20 /etc/init.d/httpd restart 啟動以後,加優先級
[root@tianyun ~]# ps axo pid,command,nice,cls |grep httpd
11116 /usr/sbin/httpd -20 TS
11119 /usr/sbin/httpd -20 TS
11120 /usr/sbin/httpd -20 TS
11121 /usr/sbin/httpd -20 TS
11122 /usr/sbin/httpd -20 TS
11123 /usr/sbin/httpd -20 TS
11124 /usr/sbin/httpd -20 TS
11125 /usr/sbin/httpd -20 TS
11126 /usr/sbin/httpd -20 TS

五.更改現有進程的 nice 級別
1.使用 top 更改 nice 級別
r 調整進程的優先級(Nice Level) (-20 高) ---0--- (19 低)
2.使用 shell 更改 nice 級別
[root@tianyun ~]# sleep 7000 &
[3] 10089
[root@tianyun ~]# renice -20 10089
10089: old priority 0, new priority -20

20181204進程優先級nice