top
整理 Linux 效能工具 top
的一些資訊,範例是在 ubuntu 16.04, AWS EC2 c5.large
上的資訊。
top
- 上半部
- 下半部
- 控制指令
上半部
1 | top - 12:46:35 up 6 days, 2:54, 1 user, load average: 0.03, 0.01, 0.00 |
第一行資訊:
12:45:14
: 系統目前的時間up 6 days, 2:52
: 已經開機多久user
: 目前系統有多少使用者登入load average
: 系統負載狀況,分成每分鐘、每五分鐘、每十五分鐘
第二行:描述 Task 的狀態
112
個 Task1
個在 running69
個在 sleeping0
個 stopped0
個 zombie
第三行:描述 CPU 使用狀況
0.2 us
: user CPU time, User Space CPU 使用佔比0.0 sy
: system CPU time, Kernel Space CPU 使用佔比0.0 ni
: nice CPU time99.8 id
: idle0.0 wa
: iowait0.0 hi
: Hardware IRQ, 硬體中斷 CPU 使用佔比0.0 si
: Software Interrupts CPU 使用佔比0.0 st
: steal time
Nice: Unix/Linux 裡程序 (Process) 的靜態優先級,範圍從
-20 ~ +19
,-20
最高優先,+19
最後,預設是 0。Nice 意思是『友好』,越高表示給予越多時間。更多參閱 Wikipedia: Nice
檢查 CPU 工具:
apt-get install sysstat
mpstat
mpstat -P ALL
1 | ~$ mpstat -P ALL |
第四行:描述記憶體狀況
- KiB Mem: 單位是
KiB
3794276
total: 實體記憶體大小375408
free: 剩餘的記憶體大小1904048
used: 使用記憶體大小1514820
buff/cache: 緩衝、快取區大小
第五行:描述 SWAP (暫存記憶體) 狀況
- KiB Swap:
0
total: SWAP 總量0
free: SWAP 剩下的量0
used: SWAP 使用的量1600528
avail Mem: 可用的記憶體大小
下半部
下半部顯示的是 process 的狀態
1 | PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND |
欄位的說明:
PID
: ProcessIDUSER
: 使用者PR
: Process 優先序NI
: Nice 值,越小優先序越高VIRT
: virtual memory usage 虛擬記憶體使用,單位 KiB- 應用程式需要的虛擬記憶體大小,不是真實的使用記憶體。
- man: The total amount of virtual memory used by the task. It includes all code, data and shared libraries plus pages that have been swapped out and pages that have been mapped but not used.
VIRT = SWAP + RES
RES
: resident memory usage,該程序使用的、未被使用的記憶體大小。- man: A subset of the virtual address space (VIRT) representing the non-swapped physical memory a task is currently using. It is also the sum of the RSan, RSfd and RSsh fields. It can include private anonymous pages, private pages mapped to files (including program images and shared libraries) plus shared anonymous pages. All such memory is backed by the swap file represented separately under SWAP
RES = CODE + DATA
SHR
: Share Memory 共享記憶體大小S
: 程序狀態- D: 不可中斷的睡眠狀態
- R: 執行中
- S: 睡眠中
- T: 跟蹤/停止
- Z: Zombie 程序
%CPU
: 上次更新到現在的 CPU 佔比%MEM
: 程序使用的記憶體百分比TIME+
: 程序使用的 CPU 時間總計,單位為 1/100 sCOMMAND
: 程序名稱
控制指令
底下是在 top 畫面時,可以使用的參數。
- Global
s
,d
: 調整更新頻率A
: 同時顯示 動態、PID、Mem、CPUH
: Thread Mode, Default: off1
: 一個或多個 CPU 顯示切換z
: 顏色Z
: 設定顏色u
: 指定要觀察的 使用者h
,?
: helpq
: 離開 top
- cli 參數: 輸出報表使用
b
: batch
- 控制上半部
l
: 開或關上半部的第一行訊息t
: 依據切換以下訊息:- 開或關閉上半部的 Task 資訊
- 切換第三行 CPU 的顯示方式,像是 Progress Bar
m
: 關閉或者開啟第四行 Mem 和 第五行 Swap 的資訊E
: 切換單位
- 控制下半部
f
: 控制顯示的欄位N
: 用 PID 數字,由大到小排序P
: 用 CPU 使用率,由大到小排序M
: 以記憶體大小,由大到小排序n
: 設定顯示 Process 的數量R
: 排序T
: 用時間累積排序上下
: 捲動畫面
常用情境
- 找出前十個最消耗記憶體的程序
top -b -o +%MEM | head -n 17
- 找出前十個最消耗 CPU 的程序
top -b -o +%CPU | head -n 17
- 觀察
PID=1234
,每 1 秒更新一次
top -b -d 1 -p 1234
- 觀察使用 ubuntu,每 2 秒更新一次
top -d 2 -u ubuntu
htop
top 在大部分的 linux 都會有,而另一個類似,但功能更強大的則是 htop
,特別是使用者體驗的提升,像是顏色、支援滑鼠操作。比較新版的 Linux,像是 Ubuntu 18.04 預設已經安裝。
功能設定
透過 F2 可以設定功能設定。
htop 上方的 Meters (儀表) 可以設定以下:
- 欄位配置:欄位 (CPU, Memory) 可以移動、增加、刪除
- 顯示方式:顯示方式有 Graph、Text、Bar、LED,如下截圖:
下圖是我重新配置的範例,增加了 Hostname、Time,調整了 CPU / Memory / Swap 位置:
常用功能
F4
: 用關鍵字過濾,例如找java
process/
搜尋 關鍵字
F5
: 顯示 process treeF6
: 排序,也可以直接用滑鼠點選綠色的欄位。l
: list open file, 在 process 位置,顯示該 process 相關的資源,例如 binary、log …- 等同於
lsof -p $(pidof -s <name>)
- 等同於
p
: 顯示程式路徑u
: 篩選個別使用者程序 (process),例如篩選使用者www-data
的程序U
: show / hide user thread,也可以到 F2 -> Display Options 設定K
: show / hide kernal thread,也可以到 F2 -> Display Options 設定s
: 使用工具strace
找 system call
其他
- config: htop 的設定會存在:
$HOME/.config/htop/htoprc
,如果弄爛了,把這設定砍掉重來就好。 - VIRT 的顏色:
- 紅色:單位為 GB
- 藍色:單位為 MB
其他
相關工具
- Process: ps, pstree
- I/O: lsof, lsblk
- CPU: lscpu, iostat, sar, mpstat
- lsmem
- lshw
- atop
- vmstat
類似工具
底下是同樣功能,用不同語言實作的。
- htop
- vtop: wirtten in Node.js
- gtop: wirtten in Node.js
- gotop: written in Go!
- brew install gotop
- snap install gotop-cjbassi
- ptop: written in python
- hegemon: written in Rust
- glances: support web, export to grafana.
- bashtop
延伸閱讀
站內資料
參考資料
- https://www.simplified.guide/linux/view-process-tree
- https://blogs.oracle.com/pranav/how-to-find-out-cpu-utilization-in-linux
- https://david50.pixnet.net/blog/post/45252072-%5B筆記%5Dlinux---top資訊
- https://blog.gtwang.org/linux/ps-top-find-processes-by-cpu-memory-usage/
- https://bqstack.com/b/detail/91/htop:-An-Interactive-Process-Viewer