nice和renice命令詳解

  

基礎命令學習目錄首頁html

 

進程調度是linux中很是重要的概念。linux內核有一套高效複雜的調度機制,能使效率極大化,但有時爲了實現特定的要求,須要必定的人工干預。好比,你但願操做系統能分配更多的CPU資源給瀏覽器進程,讓瀏覽速度更快、更流暢,操做體驗更好。那具體應該怎麼作呢?儘管linux的進程調度算法十分複雜,但都是以進程的優先級爲基礎的。所以,只須要改變進程的優先級便可。linux

在linux中,nice命令用於改變進程的優先級。算法

nice命令?什麼鬼?哪有命令直接說本身「nice」的?咋一看,這個名字確實很「nice」,只是這裏的「nice」是指「niceness」,即友善度、謙讓度。用於進程中,表示進程的優先級,也即進程的友善度。niceness值爲負時,表示高優先級,能提早執行和得到更多的資源,對應低友善度;反之,則表示低優先級,高友善度。瀏覽器

nice命令格式:nice [OPTION] [COMMAND [ARG]...]ruby

當nice沒有選項時,輸出值表示系統進程缺省的niceness值,通常爲0。bash

xie@xie-VirtualBox:~$ nice 0 

nice命令中沒有給出具體的niceness值時,默認爲10。如nice vi設置vi進程的niceness爲10。post

-n 選項

-n選項後面跟具體的niceness值。niceness值的範圍-20~19,小於-20或大於19的值分別記爲-20和19。學習

xie@xie-VirtualBox:~$ nice -n 10 vi& 

該命令設置vi進程的niceness值爲10,也就是較低的優先級。ui

若是設置的niceness值爲負,那麼必需要有管理員權限。這也不難理解,當niceness爲負時,意味着該進程要搶佔其餘進程的資源,必需要有權限才行;若是niceness爲正,即表示謙讓度高,這對其餘進程來講是喜聞樂見的,也固然就不用權限認證了。url

能夠經過ps -l查看進程的niceness值。

xie@xie-VirtualBox:~$ ps -l
F S   UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 1635 1634 0 80 0 - 2178 wait pts/13 00:00:00 bash 0 T 1000 1677 1635 0 90 10 - 1767 signal pts/13 00:00:00 vi 0 R 1000 1678 1635 0 80 0 - 1606 - pts/13 00:00:00 ps 

NI列即表示進程的niceness值。vi進程對應的NI值正好爲剛設置的10。那PRI列又是什麼呢?PRI表示進程當前的總優先級,值越小表示優先級越高,由進程默認的PRI加上NI獲得,即PRI(new) = PRI(old) + NI。由上程序,進程默認的PRI是80,因此加上值爲10的NI後,vi進程的PRI爲90。
因此,須要注意的是,NI即niceness的值只是進程優先級的一部分,不能徹底決定進程的優先級,但niceness值的絕對值越大,效果越顯著。

--adjustment=N 選項

--adjustment選項和-n選項的效果是同樣的,在等號右邊設置對應的niceness值便可。

xie@xie-VirtualBox:~$ nice --adjustment=16 vi& [1] 1681 xie@xie-VirtualBox:~$ ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 1635 1634 0 80 0 - 2178 wait pts/13 00:00:00 bas 0 T 1000 1681 1635 0 96 16 - 1767 signal pts/13 00:00:00 vi 0 R 1000 1682 1635 0 80 0 - 1606 - pts/13 00:00:00 ps 

注意,直接使用「-N」也能夠設置niceness值。好比,nice -12 vi& 將vi的niceness值設置爲12,若是是nice --12 vi&的話,則設置niceness的值爲-12。這很容易混淆,建議使用-n或--adjustment選項,不易出錯。

其餘選項

--help 顯示幫助信息 --version 顯示版本信息 

renice命令

以上討論的都是爲即將運行的進程設置niceness值,而renice用於改變正在運行的進程的niceness值。

renice,字面意思即從新設置niceness值,進程啓動時默認的niceness值爲0,能夠用renice更新。

renice語法:renice [優先等級][-g<程序羣組名稱>...][-p<程序識別碼>...][-u <用戶名稱>...]

如:

renice -5 -p 5200  #將PID爲5200的進程的niceness設爲-5 renice -5 -u xie #將屬於用戶xie的進程的niceness設爲-5 renice -5 -g group1 #將屬於group1組的程序的niceness設爲5


做者:Rabin_xie
連接:https://www.jianshu.com/p/fd3dec3cd393
來源:簡書
簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。

 

命令:nice

參數:

-n ,--adjustment=N 兩個參數含義相同,設置進程優先級的謙讓值(修正值)爲N

示例:

nice -n -10 ws_gw 

設置進程ws_gw的優先級的修正值爲-10

nice -19 ws_gw

已優先級19來啓動ws_gw,此時-不標識負數,而表示參數指令,已19優先級來啓動;

做用:

 nice命令以更改過的優先序來執行程序,若是未指定程序,則會印出目前的排程優先序,內定的 adjustment 爲 10,範圍爲 -20(最高優先序)到 19(最低優先序)。

--------也就是說要在啓動時,在啓動命令前加上 nice xx command才能生效;

例如: nice -10  ./aaa ../conf/aa.xml 

--------./aaa ../conf/aa.xml 爲正常啓動命令,nice -10 即已修正值爲-10來啓動aaa

修正值的用法,進程真正的優先級=進程默認優先級+修正值(nice值)

PRI(real) = PRI(old) + NI

因此爲負值則優先級越高,爲正值優先級越低

其餘說明:

top時進程信息字段的ni值即爲修正值;最低爲19,因此下圖的20最終爲19

已19優先級啓動vi

 已正常優先級啓動vi

 

 已修正值-10啓動vi:

 

相關文章
相關標籤/搜索