引言
top命令是UNIX/Linux系統(tǒng)中,用于查看系統(tǒng)詳情的第一入口,一般我們查看機(jī)器運(yùn)行狀態(tài)的時(shí)候,總是第一個(gè)使用top命令,而實(shí)際上top命令展示的數(shù)據(jù)很多,對(duì)于新手來說這些其實(shí)并不友好。本文主要的目的就是做一個(gè)詳細(xì)的梳理。
介紹(description)
top 程序提供了一個(gè)正在運(yùn)行的系統(tǒng)的實(shí)時(shí)數(shù)據(jù)的展示。它可以展示的內(nèi)容包含系統(tǒng)的基本信息,以及當(dāng)前正在被linux內(nèi)核管理的任務(wù)。這些系統(tǒng)的摘要信息的類型以及任務(wù)展示的類型,排序和大小都是用戶可配置的,并且這些配置可以是持久化的,不受重啟影響。
首行/基本信息
首行可以使用命令 uptime替代。首行顯示的內(nèi)容從左到右分別為
* 當(dāng)前的時(shí)間
* 系統(tǒng)累積以及運(yùn)行的時(shí)間
* 當(dāng)前登入用戶的數(shù)量
* 當(dāng)前的系統(tǒng)負(fù)載。
系統(tǒng)負(fù)載三個(gè)數(shù)字的含義
一般來說,系統(tǒng)每隔5秒鐘,會(huì)檢查一下當(dāng)前系統(tǒng)活躍的進(jìn)程數(shù)。這個(gè)活躍進(jìn)程要滿足3個(gè)前提
* 它沒有在等待I/O操作的結(jié)果
* 它沒有主動(dòng)進(jìn)入等待狀態(tài)(也就是沒有調(diào)用’wait’)
* 沒有被停止(例如:等待終止)
而系統(tǒng)負(fù)載的三個(gè)數(shù)值分別表示的是1分鐘,5分鐘和15分鐘系統(tǒng)負(fù)載的平均值。
對(duì)于一個(gè)具有n核處理器的系統(tǒng)來說,當(dāng)系統(tǒng)負(fù)載的load average為n的時(shí)候,表示系統(tǒng)差不多剛剛好滿負(fù)荷,但是已經(jīng)沒有額外的經(jīng)歷去處理其它任務(wù)了。當(dāng)load average 大于n的時(shí)候,表示系統(tǒng)超負(fù)荷運(yùn)轉(zhuǎn)。一般來說為了使系統(tǒng)能正常運(yùn)轉(zhuǎn),我們經(jīng)驗(yàn)上,任務(wù)load average / n 《 0.7 是一般能接受的情況。
第二行/cpu信息
第二行主要顯示進(jìn)程和cpu的信息,注意在top命令中task指進(jìn)程。第二行的信息依次為
* 進(jìn)程總數(shù)
* 正常運(yùn)行的進(jìn)程數(shù)量
* 休眠的進(jìn)程總數(shù)
* 停止的進(jìn)程總數(shù)
* 僵死進(jìn)程總數(shù)
* us用戶進(jìn)程占用cpu資源的百分比
* sy內(nèi)核態(tài)進(jìn)程占cpu資源的百分比
* ni用戶進(jìn)程空間內(nèi)改變過優(yōu)先級(jí)的進(jìn)程占cpu資源的百分比
* id空閑cpu的百分比
* wa 等待輸入輸出的進(jìn)程占cpu資源的百分比
* hi 硬中斷占用的百分比
* si軟中斷占用的百分比
* st 虛擬機(jī)占用百分比
第三行/內(nèi)存相關(guān)信息
mem
物理內(nèi)存總量
使用的物理內(nèi)存總量
空閑的物理內(nèi)存總量
用在內(nèi)核緩存的內(nèi)存總量
swap
交換區(qū)內(nèi)存總量
使用的交換區(qū)的總量
空閑的交換區(qū)總量
緩存的交換區(qū)總量。
Swap:表示硬盤上交換分區(qū)的使用情況。只有mem被當(dāng)前進(jìn)程實(shí)際占用完,即沒有了buffers和cache時(shí),才會(huì)使用到swap。
上面這句話只是一般情況下的理想狀態(tài),實(shí)際上內(nèi)核可能會(huì)主動(dòng)地將一些暫時(shí)不用的內(nèi)存塊寫入到磁盤的交換區(qū)(swap),這樣節(jié)約出來的內(nèi)存就可以用作他用了。這些被寫入swap的內(nèi)存,只有當(dāng)實(shí)際需要的時(shí)候,才會(huì)被重新寫入內(nèi)存。
注意:當(dāng)物理內(nèi)存空閑的時(shí)候,也有可能會(huì)有大量的swap。原因在于,有可能存在這么一種情況,某一個(gè)進(jìn)程,需要大量的物理內(nèi)存,而當(dāng)這個(gè)進(jìn)程結(jié)束的時(shí)候,這個(gè)進(jìn)程在生命周期中,被交換進(jìn)入swap的內(nèi)存,并不會(huì)主動(dòng)釋放。操作系統(tǒng)總是在實(shí)際需要的時(shí)候才去做處理,這樣就會(huì)出現(xiàn)在某一些特定的時(shí)段,物理內(nèi)存很空閑,而swap使用量卻很高的情況。
進(jìn)程信息
參看Linux中top的說明
* pid : Process Id進(jìn)程id,這個(gè)是進(jìn)程的唯一標(biāo)識(shí)符。這個(gè)id,會(huì)被周期性地復(fù)寫,但是不會(huì)從0開始。
* ppid : Parent Process PID父進(jìn)程的pid
* ruser : Real User Name, 當(dāng)前進(jìn)程真實(shí)的用戶名稱
* uid : User Id. 進(jìn)程擁有者的有效用戶id
* USER : User Name,生效用戶名稱
* group : group name 用戶組民粹
* TTY : Controlling Tty 控制終端的名稱。啟動(dòng)進(jìn)程的終端名稱。然而當(dāng)一個(gè)進(jìn)程不是從終端中被訪問的時(shí)候,你將會(huì)看到問號(hào)(????)
* pr : Priority 進(jìn)程的優(yōu)先級(jí)
* ni : Nice Value.優(yōu)先級(jí)的值,負(fù)數(shù)表示優(yōu)先級(jí)很高,正數(shù)表示優(yōu)先級(jí)比較低。
* p : Last userd CPU (SMP)。在多處理環(huán)境中,表示最近一次使用的cpu序號(hào)。
* %cpu : cpu的使用量占總cpu時(shí)間的百分比
* TIME : CPU TIME 任務(wù)從開始到現(xiàn)在使用的cpu的總時(shí)間。
* TIME + : CPU Time ,hundredths 更為細(xì)粒度更為精確的cpu耗時(shí)
* %MES : 進(jìn)程使用的內(nèi)存量
* VIRT : 進(jìn)程使用的虛擬內(nèi)存的大小
* SWAP : 進(jìn)程使用的交換區(qū)的大小
* RES : Resident Size 駐留內(nèi)存大小,指進(jìn)程除去使用交換區(qū)swap的內(nèi)存,使用的物理內(nèi)存的大小
* CODE : code size 指代碼占用物理內(nèi)存的大小
* DATA : Data + Stack size 數(shù)據(jù)和堆棧占用的大小
* SHR : Shared Mem size 進(jìn)程共享內(nèi)存的大小
* nFLT : Page Fault Count 缺頁(yè)總數(shù)
* nDRT : Dirty Pages count 臟頁(yè)數(shù)量
* S : process status 進(jìn)程狀態(tài) 。 分別有D R S T Z ,分別表示【不可中斷的休眠】【正在運(yùn)行】【休眠中】【暫?;蛘吒櫊顟B(tài)】【僵死狀態(tài)】,參考
* Command : Command line or Program name 命令或者進(jìn)程名稱
* WCHAN : Sleep in Function 顯示當(dāng)前休眠的函數(shù)
* Flages :Task Flags 進(jìn)程在進(jìn)程計(jì)劃中的標(biāo)準(zhǔn)。
評(píng)論