服務器CPU狀態(tài):top指令、火焰圖、perf

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工具繪制火焰圖:

  1. 使用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 秒

  1. 生成火焰圖
# 生成折疊后的調(diào)用棧
sudo perf script -i perf.data &> perf.unfold

# 生成火焰圖
./stackcollapse-perf.pl perf.unfold &> perf.folded

# 生成 svg 圖
./flamegraph.pl perf.folded > perf.svg
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容