top是一個經(jīng)常用的命令,平時只是留意一下哪個進(jìn)程用得比較高CPU或者內(nèi)存,但這里還是有一些小學(xué)問:

Tasks
Tasks 任務(wù)(進(jìn)程),系統(tǒng)現(xiàn)在共有627個進(jìn)程,其中處于運(yùn)行中的有1個,626個在休眠(sleep),stoped狀態(tài)的有0個,zombie狀態(tài)(僵尸)的有0個。
CPU(s)
top開始顯示的是總的CPU使用的狀況,而想看每一個邏輯CPU的狀態(tài),可按“1”。
關(guān)于us/sy/ni/id/wa/hi/si/st的含義:
us:用戶空間(user)占用CPU的百分比。
sy:內(nèi)核空間(system)占用CPU的百分比。
ni:改變過優(yōu)先級的進(jìn)程占用CPU的百分比
id:空閑(idle)CPU百分比
wa:IO等待(wait)占用CPU的百分比
hi:硬中斷(Hardware IRQ)占用CPU的百分比
si:軟中斷(Software Interrupts)占用CPU的百分比
st:(Steal Time)當(dāng)hypervisor服務(wù)另一個虛擬處理器的時候,虛擬 CPU 等待實際 CPU 的時間的百分比。
Load Average
Load Averge:系統(tǒng)負(fù)載,即任務(wù)隊列的平均長度。 三個數(shù)值分別為 1分鐘、5分鐘、15分鐘前到現(xiàn)在的平均值。
Load Averge是怎么觀察比較合適呢?其定義為:單個邏輯CPU滿載為1.0,超過1.0即為過載運(yùn)行。一個穩(wěn)定運(yùn)行的系統(tǒng)一般是不會一直過載負(fù)荷運(yùn)行的,因此最好觀察的是5分鐘和15分鐘的值。如果這個值除以邏輯CPU數(shù)大于1.0的話,可能系統(tǒng)就需要優(yōu)化才能繼續(xù)運(yùn)行。
如何看邏輯CPU的數(shù)量?給出Shell代碼:
grep 'model name' /proc/cpuinfo | wc -l
Mem
Mem:系統(tǒng)內(nèi)存的狀態(tài)
total:交換區(qū)總量(64GB)
used:使用的交換區(qū)總量(62GB)
free:空閑交換區(qū)總量(448MB)
buffers:緩沖的交換區(qū)總量(4GB)
Swap
Swap:虛擬內(nèi)存的狀態(tài)
total:交換區(qū)總量(2GB)
used:使用的交換區(qū)總量(0)
free:空閑交換區(qū)總量(2GB)
cached:緩存的交換區(qū)總量(54GB)
再說多一點:Mem的buffer和Swap的cached
之前在微博很熱的一條面試問題:buffer和cached的區(qū)別是什么?正好在top的命令出現(xiàn)了,也想多說一點。
buffers:出現(xiàn)在Mem,實際上是要從內(nèi)存寫入硬盤的數(shù)據(jù),由于內(nèi)存和硬盤的IO速度不一樣,解決的是寫效率的問題;
cached:出現(xiàn)在Swap,實際上是要從硬盤讀入內(nèi)存的數(shù)據(jù),由于再讀一次硬盤速度會很慢,虛擬內(nèi)存就將一些次重要的文件放在cached,讓二次讀取同樣數(shù)據(jù)時間會更快一點。
PID USER PR NI VIRT RES SHR %CPU %Mem Time+ COMMAND
標(biāo)題夠長的,實際要弄清楚的是各種標(biāo)記的意義。
PID:進(jìn)程id
USER:運(yùn)行的用戶
PR:進(jìn)程優(yōu)先權(quán),代表這個進(jìn)程可被執(zhí)行的優(yōu)先級,其值越小,優(yōu)先級就越高,越早被執(zhí)行
NI:進(jìn)程N(yùn)ice值,代表這個進(jìn)程的優(yōu)先值,越小,優(yōu)先值越高(負(fù)值表示高優(yōu)先級,正值表示低優(yōu)先級)
VIRT:進(jìn)程使用的虛擬內(nèi)存總量,單位kb。VIRT=SWAP+RES
RES:進(jìn)程使用的、未被換出的物理內(nèi)存大小,單位kb。RES=CODE+DATA
SHR:共享內(nèi)存大小,單位kb
%CPU:上次更新到現(xiàn)在的CPU時間占用百分比
%Mem:進(jìn)程使用的物理內(nèi)存百分比
Time+:進(jìn)程使用的CPU時間總計,單位1/100秒
COMMAND:進(jìn)程名稱(命令名/命令行)
重點看看PR和NI的關(guān)系:
進(jìn)程優(yōu)先級:PRI(new)=PRI(old)+NICE
也就是進(jìn)程最后的優(yōu)先級是由PR和NIC共同決定的。
對nice值一個形象比喻,假設(shè)在一個CPU輪轉(zhuǎn)中,有2個runnable的進(jìn)程A和B,如果他們的nice值都為0,假設(shè)內(nèi)核會給他們每人分配1k個cpu時間片。但是假設(shè)進(jìn)程A的為0,但是B的值為-10,那么此時CPU可能分別給A和B分配1k和1.5k的時間片。故可以形象的理解為,nice的值影響了內(nèi)核分配給進(jìn)程的cpu時間片的多少,時間片越多的進(jìn)程,其優(yōu)先級越高,其優(yōu)先級值(PRI)越低。%nice,就是改變過優(yōu)先級的進(jìn)程的占用CPU的百分比,如上例中就是0.5k/2.5k=1/5=20%。