top是一個(gè)經(jīng)常用的命令,平時(shí)只是留意一下哪個(gè)進(jìn)程用得比較高CPU或者內(nèi)存,但這里還是有一些小學(xué)問(wèn):
Tasks
Tasks 任務(wù)(進(jìn)程),系統(tǒng)現(xiàn)在共有627個(gè)進(jìn)程,其中處于運(yùn)行中的有1個(gè),626個(gè)在休眠(sleep),stoped狀態(tài)的有0個(gè),zombie狀態(tài)(僵尸)的有0個(gè)。
CPU(s)
top開(kāi)始顯示的是總的CPU使用的狀況,而想看每一個(gè)邏輯CPU的狀態(tài),可按“1”。
關(guān)于us/sy/ni/id/wa/hi/si/st的含義:
us:用戶空間(user)占用CPU的百分比。
sy:內(nèi)核空間(system)占用CPU的百分比。
ni:改變過(guò)優(yōu)先級(jí)的進(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ù)另一個(gè)虛擬處理器的時(shí)候,虛擬 CPU 等待實(shí)際 CPU 的時(shí)間的百分比。
Load Average
Load Averge:系統(tǒng)負(fù)載,即任務(wù)隊(duì)列的平均長(zhǎng)度。 三個(gè)數(shù)值分別為 1分鐘、5分鐘、15分鐘前到現(xiàn)在的平均值。
Load Averge是怎么觀察比較合適呢?其定義為:?jiǎn)蝹€(gè)邏輯CPU滿載為1.0,超過(guò)1.0即為過(guò)載運(yùn)行。一個(gè)穩(wěn)定運(yùn)行的系統(tǒng)一般是不會(huì)一直過(guò)載負(fù)荷運(yùn)行的,因此最好觀察的是5分鐘和15分鐘的值。如果這個(gè)值除以邏輯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)
再說(shuō)多一點(diǎn):Mem的buffer和Swap的cached
之前在微博很熱的一條面試問(wèn)題:buffer和cached的區(qū)別是什么?正好在top的命令出現(xiàn)了,也想多說(shuō)一點(diǎn)。
buffers:出現(xiàn)在Mem,實(shí)際上是要從內(nèi)存寫入硬盤的數(shù)據(jù),由于內(nèi)存和硬盤的IO速度不一樣,解決的是寫效率的問(wèn)題;
cached:出現(xiàn)在Swap,實(shí)際上是要從硬盤讀入內(nèi)存的數(shù)據(jù),由于再讀一次硬盤速度會(huì)很慢,虛擬內(nèi)存就將一些次重要的文件放在cached,讓二次讀取同樣數(shù)據(jù)時(shí)間會(huì)更快一點(diǎn)。
PID USER PR NI VIRT RES SHR %CPU %Mem Time+ COMMAND
標(biāo)題夠長(zhǎng)的,實(shí)際要弄清楚的是各種標(biāo)記的意義。
PID:進(jìn)程id
USER:運(yùn)行的用戶
PR:進(jìn)程優(yōu)先權(quán),代表這個(gè)進(jìn)程可被執(zhí)行的優(yōu)先級(jí),其值越小,優(yōu)先級(jí)就越高,越早被執(zhí)行
NI:進(jìn)程N(yùn)ice值,代表這個(gè)進(jìn)程的優(yōu)先值,越小,優(yōu)先值越高(負(fù)值表示高優(yōu)先級(jí),正值表示低優(yōu)先級(jí))
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時(shí)間占用百分比
%Mem:進(jìn)程使用的物理內(nèi)存百分比
Time+:進(jìn)程使用的CPU時(shí)間總計(jì),單位1/100秒
COMMAND:進(jìn)程名稱(命令名/命令行)
重點(diǎn)看看PR和NI的關(guān)系:
進(jìn)程優(yōu)先級(jí):PRI(new)=PRI(old)+NICE
也就是進(jìn)程最后的優(yōu)先級(jí)是由PR和NIC共同決定的。
對(duì)nice值一個(gè)形象比喻,假設(shè)在一個(gè)CPU輪轉(zhuǎn)中,有2個(gè)runnable的進(jìn)程A和B,如果他們的nice值都為0,假設(shè)內(nèi)核會(huì)給他們每人分配1k個(gè)cpu時(shí)間片。但是假設(shè)進(jìn)程A的為0,但是B的值為-10,那么此時(shí)CPU可能分別給A和B分配1k和1.5k的時(shí)間片。故可以形象的理解為,nice的值影響了內(nèi)核分配給進(jìn)程的cpu時(shí)間片的多少,時(shí)間片越多的進(jìn)程,其優(yōu)先級(jí)越高,其優(yōu)先級(jí)值(PRI)越低。%nice,就是改變過(guò)優(yōu)先級(jí)的進(jìn)程的占用CPU的百分比,如上例中就是0.5k/2.5k=1/5=20%。