top
top類似ps指令,但可以進入對話模式,動態(tài)顯示實時狀況
進入top后的指令
- l – 關閉或開啟第一部分第一行 top 信息的表示
- t – 關閉或開啟第一部分第二行 Tasks 和第三行 Cpus 信息的表示
- m – 關閉或開啟第一部分第四行 Mem 和 第五行 Swap 信息的表示
- N – 以 PID 的大小的順序排列表示進程列表
- P – 以 CPU 占用率大小的順序排列進程列表(默認按此排序)
- M – 以內(nèi)存占用率大小的順序排列進程列表
- h – 顯示幫助
- n – 設置在進程列表所顯示進程的數(shù)量
- q – 退出 top
- s – 改變畫面更新周期
- f – 編輯哪些列顯示
- 1 – 按邏輯CPU區(qū)分顯示情況
- u – 按用戶區(qū)分顯示情況
- E – 切換顯示單位(KB\MB\GB)
顯示內(nèi)容
top - 15:17:11 up 41 days, 5:34, 0 users, load average: 0.08, 0.11, 0.12
系統(tǒng)時間,系統(tǒng)至今運行時間,當前登錄用戶數(shù),1、5、15分鐘內(nèi)平均系統(tǒng)負載(即任務隊列的平均長度,通常數(shù)值不超過機器的總核數(shù),就沒問題)
Tasks: 13 total, 1 running, 12 sleeping, 0 stopped, 0 zombie
當前進程,運行中進程,休眠進程,停止進程,僵尸進程
%Cpu(s): 10.0 us, 3.3 sy, 0.0 ni, 86.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
CPU空間占用情況
KiB Mem : 7862312 total, 895436 free, 2730104 used, 4236772 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 4792852 avail Mem
內(nèi)存占用情況,以及硬盤提供的SWAP交換區(qū)占用情況。當內(nèi)存不夠用時開始占用SWAP
- 進程信息
PID 進程id
USER 進程所有者的用戶名
PR 優(yōu)先級
NI nice值,負值表示高優(yōu)先級,正值表示低優(yōu)先級
VIRT 進程使用的虛擬內(nèi)存總量,單位kb。VIRT=SWAP+RES
RES 進程使用的、未被換出的物理內(nèi)存大小,單位kb。RES=CODE+DATA
SHR 共享內(nèi)存大小,單位kb
S 進程狀態(tài)。D=不可中斷的睡眠狀態(tài) R=運行 S=睡眠 T=跟蹤/停止 Z=僵尸進程
%CPU 上次更新到現(xiàn)在的CPU時間占用百分比
%MEM 進程使用的物理內(nèi)存百分比
TIME+ 進程使用的CPU時間總計,單位1/100秒
COMMAND 命令名/命令行
火焰圖(Flame Graph)
svg格式的矢量圖。
Y軸表示函數(shù)調(diào)用棧的深度,最頂端是當前正在占用CPU的函數(shù),下方都是父函數(shù)。
X軸表示函數(shù)在采樣中出現(xiàn)的頻率。
火焰圖顏色是隨機的暖色調(diào),不代表實際性能。

火焰圖類型
On-CPU火焰圖,專用于表現(xiàn)計算密集型。
Off-CPU火焰圖,專用于表現(xiàn)IO密集型。

使用Linux中自帶的perf工具繪制火焰圖:
- 使用perf采集進程數(shù)據(jù),生成perf.data文件
sudo perf record -F 99 -p 2512 -g -- sleep 60
record:表示采集系統(tǒng)事件,沒有采用 -e 執(zhí)行采集事件,則默認采集 cycles(即 CPU clock 周期)。
-F 99:指定采樣頻率為 99Hz(每秒99次),如果 99次都返回同一個函數(shù)名, 那就說明 CPU 這一秒鐘都在執(zhí)行同一個函數(shù),可能存在性能問題。
-p 2512:指定進程號,對某一個進程分析。
-g:表示記錄調(diào)用棧。
sleep 30:表示持續(xù) 30 秒
- 生成火焰圖
# 生成折疊后的調(diào)用棧
sudo perf script -i perf.data &> perf.unfold
# 生成火焰圖
./stackcollapse-perf.pl perf.unfold &> perf.folded
# 生成 svg 圖
./flamegraph.pl perf.folded > perf.svg