Linux top 命令?這裡幫你拆解一下
- 2019 年 10 月 25 日
- 筆記
作者 | waterandair
原文 | https://segmentfault.com/a/1190000009713245
top 命令是 Linux 下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況。
一、內容介紹
top 命令運行圖:

第一行——基本資訊
load average:

load average 表示系統負載均值,使用 top 或 uptime 可以查看到負載均值的資訊,三個數值分表表示 1 分鐘內 、5 分鐘內 、 15 分鐘內的系統負載均值,要理解這三個數值的含義,首先要了解系統的 「核數」
系統的核數 = CPU1 x CPU1的核數 + CPU2 x CPU2的核數 + CPUn x CPUn的核數 + ……
更清楚的講,在 Linux 系統中輸入命令grep -c 'model name' /proc/cpuinfo
,即可得到核數。
回到負載均值,負載均值的飽和值等於系統的核數
, 所以, 根據 load average 觀察系統負載首先要看系統中共有多少 "核", 單處理器單核的飽和值為 1, 單處理器雙核的飽和值為 2, 雙處理器單核的飽和值也為 2.
理解負載均值的最經典的例子是把一個 CPU 的核當做一座單行單向橋, 多核即為多行路單向橋. 如圖:

假定, 目前系統是單核系統, 根據上面的描述, 它的負載飽和值為 1. 這種條件下, 各種數值的含義如下:
- 0.00 表示橋上沒有任何車流, 非常暢通
- 0.50 表示橋上有最高承載量一半的車流, 也比較流暢.
- 1.00 表示橋上已經達到了最大承載量, 如果再有車來, 可能就要稍等才能上橋了, 這種情況下, 車速都會很慢, 往往都會造成負載均值繼續上升.
- 1.70 表示橋已經達到最大負載, 且還有相對於橋最大負載 70% 的車輛等待上橋, 這個時候的系統, 已經要不堪重負了.
在實際應用中, 重點關注 5 分鐘,15 分鐘的負載均值,當達到 0.7 時,就需要調查原因了。
2. 任務資訊

殭屍進程:表示已經終止,但仍然保留一些資訊的進程。其等待父進程調用 wait(),就可以從記憶體中完全移除。 將是進程無法使用 kill
清理。如果要手動清理殭屍進程,需要找到其父進程,kill 掉父進程後,LInux 的 init
進程將接管該殭屍進程 (linux 中所有的子進程都需要有父進程,當父進程被 kill 後,其所有子進程將過繼給 init 進程),init 進程隔一段時間去調用 wait(), 來清除殭屍進程。
3. CPU 使用情況

4. 物理記憶體使用情況

buff/cache:
buffers 和 cache 都是記憶體中存放的數據,不同的是,buffers 存放的是準備寫入磁碟的數據,而 cache 存放的是從磁碟中讀取的數據 在 Linux 系統中,有一個守護進程 (daemon) 會定期把 buffers 中的數據寫入的磁碟,也可以使用 sync 命令手動把 buffers 中的數據寫入磁碟。使用 buffers 可以把分散的 I/O 操作集中起來,減少了磁碟尋道的時間和磁碟碎片。
cache 是 Linux 把讀取頻率高的數據,放到記憶體中,減少 I/O。Linux 中 cache 沒有固定大小,根據使用情況自動增加或刪除。
# 手動把buffers寫入硬碟並清空cachesync && echo 3 > /proc/sys/vm/drop_caches
5. 交換區使用情況

Swap(記憶體交換區):
是硬碟上的一塊空間。在記憶體不足的情況下,作業系統把記憶體中不用的數據存到硬碟的交換區,騰出記憶體來讓別的程式運行。因此,開啟 swap 會一定程度的引起 I/O 性能下降 (阿里伺服器默認不開)。
6. 進程詳細資訊

二、靈活使用 top
1. 命令行式使用
-b
:以批處理模式操作 這種方式可以把 top 輸出的內容以可讀的形式寫入文件top -b >> top.txt
-c
:顯示完整的命令行 (COMMAND), 想查看進程執行的具體位置時,非常有用 -d
:螢幕刷新間隔時間 top -d 1
: 表示每隔一秒刷新一次 -s
:使用保密模式 -S
:指定累積模式 -i
:不顯示任何閑置或者僵死進程 -u<用戶名
>:指定用戶名 -p<進程號
>:指定進程 -n<次數>
:指定循環顯示的次數,到了次數自己退出。
2. 互動式使用
top 命令顯示系統實時狀態,支援交互操作。執行 top 命令,顯示系統狀態介面(同時也是交互介面),輸入交互命令:
1
:查看 CPU 每個核的使用情況 h
:顯示幫助畫面,給出一些簡短的命令總結說明 k
:終止一個進程 i
:忽略閑置和僵死進程,這是一個開關式命令 q
:退出程式 r
:重新安排一個進程的優先順序別 S
:切換到累計模式 s
:改變兩次刷新之間的延遲時間(單位為 s),如果有小數,就換算成 ms。輸入 0 值則系統將不斷刷新,默認值是 5s l
:切換顯示平均負載和啟動時間資訊 m
:切換顯示記憶體資訊 t
:切換顯示進程和 CPU 狀態資訊 c
:切換顯示命令名稱和完整命令行 M
:根據駐留記憶體大小進行排序 P
:根據 CPU 使用百分比大小進行排序 T
:根據時間 / 累計時間進行排序 w
:將當前設置寫入~/.toprc 文件中。