linux top命令


https://www.jb51.net/article/135411.htm
https://www.lifewire.com/linux-top-command-2201163
http://man7.org/linux/man-pages/man1/top.1.html
top 命令主要用於查看進程的相關信息,同時它也會提供系統平均負載,cpu 信息和內存信息。下面的截圖展示了 top 命令默認提供的信息:
在這裏插入圖片描述

系統平均負載

top 命令輸出中的第一行是系統的平均負載,這和 uptime 命令的輸出是一樣的:
在這裏插入圖片描述
07:24:36 表示系統當前時間。
up 1:42 表示系統最後一次啓動後總的運行時間。
1 user 表示當前系統中只有一個登錄用戶。
load average: 0.51, 0.29, 0.27 表示系統的平均負載,
最後的三個數字分別表示最後一分鐘的系統平均負載,最後五分鐘的系統平均負載,最後十五分鐘的系統平均負載。
小寫字母 i 可以控制是否顯示系統平均負載信息。

任務信息彙總

在 linux 系統中,一般把進程和線程統稱爲任務。第二行信息是對當前系統中所有任務的統計:
在這裏插入圖片描述
Tasks:328 total 表示當前系統的進程總數。
2 running 表示當前系統中有 2 個正在運行的進程。
250 sleeping 表示當前系統中有 250個休眠的進程。
0 stopped 表示停止狀態的進程數爲 0。
0 zombie 表示處於僵死狀態的進程數爲 0。

CPU 信息

第三行顯示 CPU 的使用情況:
在這裏插入圖片描述
這裏一共有八個字段,是我們瞭解 CPU 負載的主要依據,下面我們逐一介紹。

us
進程在用戶地址空間中消耗 CPU 時間的百分比。像 shell程序、各種語言的編譯器、數據庫應用、web 服務器和各種桌面應用都算是運行在用戶地址空間的進程。這些程序如果不是處於 idle 狀態,那麼絕大多數的 CPU 時間都是運行在用戶態。
sy
進程在內核地址空間中消耗 CPU 時間的百分比。所有進程要使用的系統資源都是由 Linux 內核處理的。當處於用戶態(用戶地址空間)的進程需要使用系統的資源時,比如需要分配一些內存、或是執行 IO 操作、再或者是去創建一個子進程,此時就會進入內核態(內核地址空間)運行。事實上,決定進程在下一時刻是否會被運行的進程調度程序就運行在內核態。對於操作系統的設計來說,消耗在內核態的時間應該是越少越好。在實踐中有一類典型的情況會使 sy 變大,那就是大量的 IO 操作,因此在調查 IO 相關的問題時需要着重關注它。
ni
ni 是 nice 的縮寫,可以通過 nice 值調整進程用戶態的優先級。這裏顯示的 ni 表示調整過 nice 值的進程消耗掉的 CPU 時間。如果系統中沒有進程被調整過 nice 值,那麼 ni 就顯示爲 0。
id
CPU 處於 idle 狀態的百分比。一般情況下, us + ni + id 應該接近 100%。
wa
CPU 等待磁盤 IO 操作的時間。和 CPU 的處理速度相比,磁盤 IO 操作是非常慢的。有很多這樣的操作,比如:CPU 在啓動一個磁盤讀寫操作後,需要等待磁盤讀寫操作的結果。在磁盤讀寫操作完成前,CPU 只能處於空閒狀態。Linux 系統在計算系統平均負載時會把 CPU 等待 IO 操作的時間也計算進去,所以在我們看到系統平均負載過高時,可以通過 wa 來判斷系統的性能瓶頸是不是過多的 IO 操作造成的。
hi & si
這兩個值表示系統處理中斷消耗的時間。中斷分爲硬中斷和軟中斷,hi 表示處理硬中斷消耗的時間,si 表示處理軟中斷消耗的時間。硬中斷是硬盤、網卡等硬件設備發送給 CPU 的中斷消息,當 CPU 收到中斷消息後需要進行適當的處理(消耗 CPU 時間)。軟中斷是由程序發出的中斷,最終也會執行相應的處理程序(消耗 CPU 時間)。
st
只有 Linux 在作爲虛擬機運行時 st 纔是有意義的。它表示虛機等待 CPU 資源的時間(虛機分到的是虛擬 CPU,當需要真實的 CPU 時,可能真實的 CPU 正在運行其它虛機的任務,所以需要等待)。

小寫字母 t 可以控制是否顯示任務信息彙總和 CPU 信息。沒錯,它能控制是否顯示兩行信息。

內存信息

內存信息包含兩行內容,內存和交換空間:
在這裏插入圖片描述
top 命令中這部分的輸出和 free 命令的輸出基本相同

控制顯示單位
top 命令默認以 K 爲單位顯示內存大小,這讓人十分抓狂。好在我們可以通過大寫字母 E 來切換內存信息區域的顯示單位(注意,E 不能控制任務區域中的內存單位),下圖以 MB 顯示內存大小:
在這裏插入圖片描述

小寫字母 m 可以控制是否顯示內存信息

任務詳情

內存信息下面是一個空行(其實是與用戶交互的區域),空行的下面就是任務詳情區域:
在這裏插入圖片描述
默認情況下這裏會顯示 12 列數據,都是我們比較關心的進行相關的信息,下面我們一個一個的介紹。
PID 表示進程 ID。
USER 表示進程所有者的有效用戶名稱。簡單說就是以哪個用戶權限啓動的進程。比如上圖中有兩個進程是用戶 nick 啓動的,還有一個是用戶 prometheus 啓動的,其它都是 root 用戶啓動的。
PR 表示進程執行的優先級,PR 的值是以 Linux 內核的視角看到的進程執行的優先級。
NI 從用戶視角看到的進程執行優先級。注意上圖中 NI 值爲 -20 的兩個進程,它們的 PR 值都是 0。
VIRT 表示進程使用的虛擬內存大小。
RES 表示進程使用的物理內存大小。
SHR 表示進程使用的共享內存的大小。
S 表示進程當前的狀態。S 值有下面幾種:
D 不可中斷的睡眠狀態(uninterruptible sleep)
R 正在運行的狀態(running)
S 睡眠狀態(sleeping)
T 跟蹤或停止狀態(traced or stopped)
Z 殭屍狀態(zombie)
%CPU 表示進程使用 CPU 的百分比。
%MEM 表示進程使用內存的百分比。
TIME+ 表示進程累計使用的 CPU 時間。
COMMAND 表示運行進程對應的程序。

一般情況下這些信息足夠了,但是如果你還想要更多的信息,你可以嘗試添加更多的列。
按下小寫字母 f 可以進入任務信息的配置界面:
在這裏插入圖片描述
在這裏你可以選擇要顯示的列,並且可以配置以哪一列進行排序。

顯示內存大小的單位問題在任務詳情區域也同樣存在,默認的單位也是 KB。要改變它的單位需要使用小寫字母 e 來進行切換,比如我可以把它切換爲以 MB 爲單位:
這樣看起來就直觀多了!

top 是一個非常複雜的命令,上面介紹的內容僅僅是一些皮毛而已。即便如此,你也可以用它來幹不少的事情了!如果你想了解更多詳細的信息,請參考 top 的使用手冊。我們接下來介紹一些常見的用例。

顯示多個 CPU 核心的詳細信息

無論系統中有多少個 CPU 核心,默認的 CPU 信息總是輸出一行,即所有核心加起來的綜合數據。能不能查看各個 CPU 核心單獨的數據呢?答案是,可以的。按鍵盤上的數字 1 就可以在不同的視圖之間切換了:
在這裏插入圖片描述

以某列對進程排序

按小寫字母 f 進入排序設置界面,選擇某一列,按小寫 ‘s’ 指定排序,然後退出。

奇怪的是默認主界面上並看不出是以哪列排序的!可以使用小寫字母 x 來粗體顯示當前排序的列:

反轉排序的結果是常見的需求,大寫字母 R 可以將當期排序的結果反轉。

顯示進程執行的完整命令

默認 COMMAND 列只顯示程序的名字,並不包含程序的路徑。有時能夠看到程序的完整路徑是很方便的。你可以通過小寫字母 c 來切換 COMMAND 列的顯示模式:
在這裏插入圖片描述

隱藏 idle 閒置 的進程

在我們調查問題時,總希望以最快的方式找到繁忙的進程。但是 top 命令會把所有的進程列出,這就需要我們通過昏花的老眼去掃描一行行的進程信息。還好,我們可以藉助小寫字母 i 來控制是否顯示處於 idle 狀態的進程!使用這個命令後你會發現世界好清爽啊!

只顯示某個用戶的進程

如果你想查看以某個用戶權限啓動的進程,可以使用小寫字母 u 。這會提示你輸入用戶的名稱,在你輸入用戶名稱後,按回車鍵:

top 命令的配置文件

top 命令是有配置文件的,也就是說你通過命令修改的配置都可以保存下來。保存配置的命令爲大寫字母 W。在你修改了 top 命令的配置後按下大寫字母 W,然後退出 top 命令並再次執行 top 命令,此時你的修改仍然在起作用。

幫助文檔

幫助文檔永遠都是我們的好朋友,小寫字母 h 或者是 ? 可以打開 top 命令的幫助文檔。不要太驚奇,文檔有點長喲!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章