1. 程式人生 > >Linux 程序管理 程序優先順序管理

Linux 程序管理 程序優先順序管理

Linux程序優先順序

Linux 是一個多使用者、多工的作業系統,系統中通常執行著非常多的程序。但是 CPU 在一個時鐘週期內只能運算一條指令(現在的 CPU 採用了多執行緒、多核心技術,所以在一個時鐘週期內可以運算多條指令。 但是同時運算的指令數也遠遠小於系統中的程序總數),所以需要由程序的優先順序來決定哪一個程序的運算指令先執行,哪一個程序的運算指令後執行。

在 Linux 系統中,表示程序優先順序的有兩個引數:Priority 和 Nice。通過"ps -l"命令可以檢視引數對應的值:

[[email protected] ~]# 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 命令格式如下:

[[email protected] ~] # nice [選項] 命令

選項:

  • -n NI值:給命令賦予 NI 值;

nice命令改變程序優先順序

用預設優先順序啟動並apache服務,檢視 PRI值是80,而NI值是0

[[email protected] ~]# service httpd start
[[email protected] ~]# 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

[[email protected] ~]# service httpd stop
[[email protected] ~]# 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 命令格式如下:

[[email protected] ~] # renice [優先順序] PID

renice 命令改變程序優先順序

[[email protected] ~]# renice -10 2125
2125: old priority -5, new priority -10
[[email protected] ~]# 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