top 命令主要用于查看進(jìn)程的相關(guān)信息,同時(shí)它也會(huì)提供系統(tǒng)平均負(fù)載,cpu 信息和內(nèi)存信息。下面的截圖展示了 top 命令默認(rèn)提供的信息:
top 命令輸出中的第一行是系統(tǒng)的平均負(fù)載,這和 uptime 命令的輸出是一樣的:
13:05:49 表示系統(tǒng)當(dāng)前時(shí)間。
up 7 days 表示系統(tǒng)最后一次啟動(dòng)后總的運(yùn)行時(shí)間。
1 user 表示當(dāng)前系統(tǒng)中只有一個(gè)登錄用戶。
load average: 0.01, 0.04, 0.00 表示系統(tǒng)的平均負(fù)載,最后的三個(gè)數(shù)字分別表示最后一分鐘的系統(tǒng)平均負(fù)載,最后五分鐘的系統(tǒng)平均負(fù)載,最后十五分鐘的系統(tǒng)平均負(fù)載。
在 linux 系統(tǒng)中,一般把進(jìn)程和線程統(tǒng)稱為任務(wù)。第二行信息是對(duì)當(dāng)前系統(tǒng)中所有任務(wù)的統(tǒng)計(jì):
Tasks:270 total 表示當(dāng)前系統(tǒng)的進(jìn)程總數(shù)。
1 running 表示當(dāng)前系統(tǒng)中有 1 個(gè)正在運(yùn)行的進(jìn)程。
269 sleeping 表示當(dāng)前系統(tǒng)中有 269 個(gè)休眠的進(jìn)程。
0 stopped 表示停止?fàn)顟B(tài)的進(jìn)程數(shù)為 0。
0 zombie 表示處于僵死狀態(tài)的進(jìn)程數(shù)為 0。
第三行顯示 CPU 的使用情況:
這里一共有八個(gè)字段,是我們了解 CPU 負(fù)載的主要依據(jù),下面我們逐一介紹。
us
進(jìn)程在用戶地址空間中消耗 CPU 時(shí)間的百分比。像 shell程序、各種語言的編譯器、數(shù)據(jù)庫應(yīng)用、web 服務(wù)器和各種桌面應(yīng)用都算是運(yùn)行在用戶地址空間的進(jìn)程。這些程序如果不是處于 idle 狀態(tài),那么絕大多數(shù)的 CPU 時(shí)間都是運(yùn)行在用戶態(tài)。
sy
在用戶空間模擬操作系統(tǒng)對(duì)進(jìn)程的調(diào)度,來調(diào)用一個(gè)進(jìn)程中的線程,每個(gè)進(jìn)程中都會(huì)有一個(gè)運(yùn)行時(shí)系統(tǒng),用來調(diào)度線程。1.通過中斷處理過程中的調(diào)度時(shí)機(jī),用戶態(tài)進(jìn)程與內(nèi)核線程之間互相切換和內(nèi)核線程之間互相切換,與最一般的情況非常相似,只是內(nèi)核線程運(yùn)行過程中發(fā)生中斷沒有進(jìn)程用戶態(tài)和內(nèi)核態(tài)的轉(zhuǎn)換。其實(shí)也有各自的真實(shí)pid,但由結(jié)構(gòu)隱藏了,對(duì)外的pid為主進(jìn)程的pid5)線程對(duì)操作系統(tǒng)來說就是進(jìn)程,因此對(duì)信號(hào)的處理是以進(jìn)程為單位分發(fā)的6)線程總數(shù)受限于系統(tǒng)進(jìn)程數(shù)7)系統(tǒng)管理線程的瓶頸:所有線程由管理線程管理8)線程之間的調(diào)度是由內(nèi)核調(diào)度器來處理的9)由于計(jì)算線程本地?cái)?shù)據(jù)的方法是基于堆棧地址的位置。
ni
ni 是 nice 的縮寫,可以通過 nice 值調(diào)整進(jìn)程用戶態(tài)的優(yōu)先級(jí)。這里顯示的 ni 表示調(diào)整過 nice 值的進(jìn)程消耗掉的 CPU 時(shí)間。如果系統(tǒng)中沒有進(jìn)程被調(diào)整過 nice 值,那么 ni 就顯示為 0。
id
CPU 處于 idle 狀態(tài)的百分比。一般情況下, us + ni + id 應(yīng)該接近 100%。
wa
CPU 等待磁盤 IO 操作的時(shí)間。和 CPU 的處理速度相比,磁盤 IO 操作是非常慢的。有很多這樣的操作,比如:CPU 在啟動(dòng)一個(gè)磁盤讀寫操作后,需要等待磁盤讀寫操作的結(jié)果。在磁盤讀寫操作完成前,CPU 只能處于空閑狀態(tài)。Linux 系統(tǒng)在計(jì)算系統(tǒng)平均負(fù)載時(shí)會(huì)把 CPU 等待 IO 操作的時(shí)間也計(jì)算進(jìn)去,所以在我們看到系統(tǒng)平均負(fù)載過高時(shí),可以通過 wa 來判斷系統(tǒng)的性能瓶頸是不是過多的 IO 操作造成的。
hi & si
這兩個(gè)值表示系統(tǒng)處理中斷消耗的時(shí)間。中斷分為硬中斷和軟中斷,hi 表示處理硬中斷消耗的時(shí)間,si 表示處理軟中斷消耗的時(shí)間。硬中斷是硬盤、網(wǎng)卡等硬件設(shè)備發(fā)送給 CPU 的中斷消息,當(dāng) CPU 收到中斷消息后需要進(jìn)行適當(dāng)?shù)奶幚?消耗 CPU 時(shí)間)。軟中斷是由程序發(fā)出的中斷,最終也會(huì)執(zhí)行相應(yīng)的處理程序(消耗 CPU 時(shí)間)。