Linux中的top命令顯示系統上正在運行的進程。它是系統管理員最重要的工具之一。被普遍用於監視服務器的負載,top命令是一個交互命令。在運行top的時候還能夠運行不少命令。shell
top命令會顯示系統的不少信息。默認運行時,top命令會顯示以下輸出:bash
top命令的頂部顯示與uptime命令類似的輸出。服務器
這些字段顯示:ide
當前時間函數
系統已運行的時間工具
當前登陸用戶的數量字體
相應最近五、10和15分鐘內的平均負載。spa
可使用’l’命令切換uptime的顯示。code
第二行顯示的是任務或者進程的總結。進程能夠處於不一樣的狀態。這裏顯示了所有進程的數量。除此以外,還有正在運行、睡眠、中止、殭屍進程的數量(殭屍是一種進程的狀態)。這些進程歸納信息能夠用’t’切換顯示。blog
第三行顯示的是CPU狀態。 這裏顯示了不一樣模式下的所佔CPU時間的百分比。這些不一樣的CPU時間表示:
us, user: 運行(未調整優先級的) 用戶進程的CPU時間
sy,system: 運行內核進程的CPU時間
ni,niced:運行已調整優先級的用戶進程的CPU時間
wa,IO wait: 用於等待IO完成的CPU時間
hi:處理硬件中斷的CPU時間
si: 處理軟件中斷的CPU時間
st:這個虛擬機被hypervisor偷去的CPU時間(譯註:若是當前處於一個hypervisor下的vm,實際上hypervisor也是要消耗一部分CPU處理時間的)。
可使用’t’命令切換顯示。
接下來兩行顯示內存使用率,有點像’free’命令。第一行是物理內存使用,第二行是虛擬內存使用(交換空間)。
物理內存顯示以下:所有可用內存、已使用內存、空閒內存、緩衝內存。
類似地:交換部分顯示的是:所有、已使用、空閒和緩衝交換空間。
內存顯示能夠用’m’命令切換。
在橫向列出的系統屬性和狀態下面,是以列顯示的進程。不一樣的列表明下面要解釋的不一樣屬性。
默認上,top顯示這些關於進程的屬性:
PID
進程ID,進程的惟一標識符
USER
進程全部者的實際用戶名。
PR
進程的調度優先級。這個字段的一些值是’rt’。這意味這這些進程運行在實時態。
NI
進程的nice值(優先級)。越小的值意味着越高的優先級。
VIRT:virtual memory usage 虛擬內存
進程使用的虛擬內存。
一、進程「須要的」虛擬內存大小,包括進程使用的庫、代碼、數據等
二、假如進程申請100m的內存,但實際只使用了10m,那麼它會增加100m,而不是實際的使用量
RES:resident memory usage 常駐內存
駐留內存大小。駐留內存是任務使用的非交換物理內存大小。
一、進程當前使用的內存大小,但不包括swap out
二、包含其餘進程的共享
三、若是申請100m的內存,實際使用10m,它只增加10m,與VIRT相反
四、關於庫佔用內存的狀況,它只統計加載的庫文件所佔內存大小
SHR:shared memory 共享內存
SHR是進程使用的共享內存。
一、除了自身進程的共享內存,也包括其餘進程的共享內存
二、雖然進程只使用了幾個共享庫的函數,但它包含了整個共享庫的大小
三、計算某個進程所佔的物理內存大小公式:RES – SHR
四、swap out後,它將會降下來
DATA
一、數據佔用的內存。若是top沒有顯示,按f鍵能夠顯示出來。
二、真正的該程序要求的數據空間,是真正在運行中要使用的。
S
這個是進程的狀態。它有如下不一樣的值:
D – 不可中斷的睡眠態。
R – 運行態
S – 睡眠態
T – 被跟蹤或已中止
Z – 殭屍態
%CPU
自從上一次更新時到如今任務所使用的CPU時間百分比。
%MEM
進程使用的可用物理內存百分比。
TIME+
任務啓動後到如今所使用的所有CPU時間,精確到百分之一秒。
COMMAND
運行進程所使用的命令。
還有許多在默認狀況下不會顯示的輸出,它們能夠顯示進程的頁錯誤、有效組和組ID和其餘更多的信息。
就是說在同一個調度週期中,優先級高的進程佔用的時間長些,而優先級低的進程佔用的短些。nice(NI)和priority(PR)
NICE值?
它是反應一個進程「優先級」狀態的值,其取值範圍是-20至19,一共40個級別
這個值越小,表示進程」優先級」越高,而值越大「優先級」越低。
過NICE命令來對一個將要執行的bash命令進行nice值設置,方法是:
>nice -n 10 bash
就又打開了一個bash,而且其nice值設置爲10,而默認狀況下,進程的優先級應該是從父進程繼承來的,這個值通常是0。
咱們能夠經過nice命令直接查看到當前shell的nice值:
>nice
10
對比一下正常狀況:
>exit > bash > nice 0
另外,使用renice命令能夠對一個正在運行的進程進行nice值的調整,咱們也可使用好比top、ps等命令查看進程的nice值
nice值雖然不是priority,可是它確實能夠影響進程的優先級。
在原來使用O1調度的Linux上,咱們還會把nice值叫作靜態優先級,這也基本符合nice值的特色,就是當nice值設定好了以後,除非咱們用renice去改它,不然它是不變的。
而priority的值在以前內核的O1調度器上表現是會變化的,因此也叫作動態優先級。
什麼是優先級和實時進程?
什麼是priority值,就是ps命令中看到的PRI值或者top命令中看到的PR值。
總結一下概念:
用nice值表示NI值,或者叫作靜態優先級,也就是用nice和renice命令來調整的優先級;
而實用priority值表示PRI和PR值,或者叫動態優先級。
本質區別:
在內核中,進程優先級的取值範圍是經過一個宏定義的,這個宏的名稱是MAX_PRIO,它的值爲140。
而這個值又是由另外兩個值相加組成的,一個是表明nice值取值範圍的NICE_WIDTH宏,另外一個是表明實時進程(realtime)優先級範圍的MAX_RT_PRIO宏。
說白了就是,Linux實際上實現了140個優先級範圍,取值範圍是從0-139,這個值越小,優先級越高。nice值的-20到19,映射到實際的優先級範圍是100-139。
新產生進程的默認優先級被定義爲:
define DEFAULT_PRIO (MAX_RT_PRIO + NICE_WIDTH / 2)
實際上對應的就是nice值的0。
正常狀況下,任何一個進程的優先級都是這個值,即便咱們經過nice和renice命令調整了進程的優先級,它的取值範圍也不會超出100-139的範圍,除非這個進程是一個實時進程,那麼它的優先級取值纔會變成0-99這個範圍中的一個。
Linux系統中運行的進程能夠分紅兩類:1.實時進程 2.非實時進程 。它們的主要區別就是經過優先級來區分的。
全部優先級值在0-99範圍內的,都是實時進程,因此這個優先級範圍也能夠叫作實時進程優先級,而100-139範圍內的是非實時進程。
top是一個交互命令
首先,咱們能夠用’h’或者’?’顯示交互命令的幫助菜單。
top命令默認在一個特定間隔(3秒)後刷新顯示。要手動刷新,用戶能夠輸入回車或者空格。
這個命令在全屏和交替模式間切換。在交替模式下會顯示4個窗口(譯註:分別關注不一樣的字段):
這四組字段共有一個獨立的可配置的歸納區域和它本身的可配置任務區域。4個窗口中只有一個窗口是當前窗口。當前窗口的名稱顯示在左上方。(譯註:只有當前窗口才會接受你鍵盤交互命令)
能夠用’a’和’w’在4個 窗口間切換。’a’移到後一個窗口,’w’移到前一個窗口。用’g’命令你能夠輸入一個數字來選擇當前窗口。
一些重要信息會以加粗字體顯示。這個命令能夠切換粗體顯示。
當按下’d’或’s’時,你將被提示輸入一個值(以秒爲單位),它會以設置的值做爲刷新間隔。若是你這裏輸入了1,top將會每秒刷新。
這會相應地切換頂部的平均負載、任務/CPU狀態和內存信息的概況顯示。