Linux進程優先級
Linux 是一個多用戶、多任務的操作系統,系統中通常運行着非常多的進程。但是 CPU 在一個時鍾周期內只能運算一條指令(現在的 CPU 采用了多線程、多核心技術,所以在一個時鍾周期內可以運算多條指令。 但是同時運算的指令數也遠遠小於系統中的進程總數),所以需要由進程的優先級來決定哪一個進程的運算指令先執行,哪一個進程的運算指令后運行。
在 Linux 系統中,表示進程優先級的有兩個參數:Priority 和 Nice。通過"ps -l"命令可以查看參數對應的值:
[root@localhost ~]# ps -le F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1 0 0 80 0 - 35738 ep_pol ? 00:00:03 systemd 1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:00 kthreadd ...省略部分輸出...
其中,PRI 代表 Priority,NI 代表 Nice。這兩個值都表示優先級,數值越小代表該進程越優先被 CPU 處理。不過,PRI值是由內核動態調整的,用戶不能直接修改。所以我們只能通過修改 NI 值來影響 PRI 值,間接地調整進程優先級。
PRI 和 NI 的關系 :PRI (最終值) = PRI (原始值) +NI
所以修改 NI 的值就可以改變進程的優先級。NI 值越小,進程的 PRI 就會降低,該進程就越優先被 CPU 處理;反之,NI 值越大,進程的 PRI 值就會増加,該進程就越靠后被 CPU 處理。
修改 NI 值時有幾個注意事項:
- NI 范圍是 -20~19。
- 普通用戶調整 NI 值的范圍是 0~19,而且只能調整自己的進程。
- 普通用戶只能調高 NI 值,而不能降低。如原本 NI 值為 0,則只能調整為大於 0。
- 只有 root 用戶才能設定進程 NI 值為負值,而且可以調整任何用戶的進程。
nice命令:改變進程優先級
nice 命令可以給新執行的命令直接賦予 NI 值,但是不能修改已經存在進程的 NI 值。nice 命令格式如下:
[root@localhost ~] # nice [選項] 命令
選項:
- -n NI值:給命令賦予 NI 值;
nice命令改變進程優先級
用默認優先級啟動並apache服務,查看 PRI值是80,而NI值是0
[root@localhost ~]# service httpd start [root@localhost ~]# ps -le 丨 grep "httd" | grep -v grep F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 1 S 0 2084 1 0 80 0 - 1130 - ? 00:00:00 httpd 5 S 2 2085 2084 0 80 0 - 1130 - ? 00:00:00 httpd 5 S 2 2086 2084 0 80 0 - 1130 - ? 00:00:00 httpd 5 S 2 2087 2084 0 80 0 - 1130 - ? 00:00:00 httpd 5 S 2 2088 2084 0 80 0 - 1130 - ? 00:00:00 httpd 5 S 2 2089 2084 0 80 0 - 1130 - ? 00:00:00 httpd
停止apache服務,並重啟動apache服務,同時修改apache服務進程的NI值為-5
[root@localhost ~]# service httpd stop [root@localhost ~]# nice -n -5 service httpd start [rooteiocdlhost ~]# ps -le | grep "httpd" | grep -v grep F S UID PID PPID C FRI NI ADDR SZ WCHAN TTY TIME CMD 1 S 0 2122 1 0 75 -5 - 1130 - ? 00:00:00 httpd 5 S 2 2123 2122 0 75 -5 - 1130 - ? 00:00:00 httpd 5 S 2 2124 2122 0 75 -5 - 1130 - ? 00:00:00 httpd 5 S 2 2125 2122 0 75 -5 - 1130 - ? 00:00:00 httpd 5 S 2 2126 2122 0 75 -5 - 1130 - ? 00:00:00 httpd 5 S 2 2127 2122 0 75 -5 - 1130 - ? 00:00:00 httpd
httpd進程的PRI值變為了75,而NI值為-5
renice 命令:改變進程優先級
renice 命令可以修改已經存在進程的 NI 值。renice 命令格式如下:
[root@localhost ~] # renice [優先級] PID
renice 命令改變進程優先級
[root@localhost ~]# renice -10 2125 2125: old priority -5, new priority -10 [root@localhost ~]# ps -le | grep "httpd" | grep -v grep 1 S 0 2122 1 0 75 -5 - 113.0 - ? 00:00:00 httpd 5 S 2 2123 2122 0 75 -5 - 1130 - ? 00:00:00 httpd 5 S 2 2124 2122 0 75 -5 - 1130 - ? 00:00:00 httpd 5 S 2 2125 2122 0 70 -10 - 1130 - ? 00:00:00 httpd 5 S 2 2126 2122 0 75 -5 - 1130 - ? 00:00:00 httpd 5 S 2 2.127 2122 0 75 -5 - 1130 - ? 00:00:00 httpd
PID為2125的進程的PRI值為70,而NI值為-10