超全整理!Linux 性能分析工具彙總

出於對 Linux 操作系統的興趣,以及對底層知識的強烈慾望,因此整理了這篇文章。本文也可以作爲檢驗基礎知識的指標,另外文章涵蓋了一個系統的方方面面。如果沒有完善的計算機系統知識,網絡知識和操作系統知識,文檔中的工具,是不可能完全掌握的,另外對系統性能分析和優化是一個長期的系列。

本文檔主要是結合 Linux 大牛,Netflix 高級性能架構師 Brendan Gregg 更新 Linux 性能調優工具的博文,蒐集 Linux 系統性能優化相關文章整理後的一篇綜合性文章,主要是結合博文對涉及到的原理和性能測試的工具展開說明。

首先來看一張圖:

上圖是 Brendan Gregg 的一次性能分析的分享,這裏面的所有工具都可以通過 man 來獲得它的幫助文檔,下問簡單介紹介紹一下常規的用法:

vmstat-- 虛擬內存統計

vmstat(VirtualMeomoryStatistics, 虛擬內存統計) 是 Linux 中監控內存的常用工具, 可對操作系統的虛擬內存、進程、CPU 等的整體情況進行監視。

vmstat 的常規用法:vmstat interval times 即每隔 interval 秒採樣一次,共採樣 times 次,如果省略 times, 則一直採集數據,直到用戶手動停止爲止。簡單舉個例子:

可以使用 ctrl+c 停止 vmstat 採集數據。

第一行顯示了系統自啓動以來的平均值,第二行開始顯示現在正在發生的情況,接下來的行會顯示每 5 秒間隔發生了什麼,每一列的含義在頭部,如下所示:

內存不足的表現:free  memory 急劇減少,回收 buffer 和 cacher 也無濟於事,大量使用交換分區(swpd), 頁面交換(swap)頻繁,讀寫磁盤數量(io)增多,缺頁中斷(in)增多,上下文切換(cs)次數增多,等待 IO 的進程數(b)增多,大量 CPU 時間用於等待 IO(wa)

iostat-- 用於報告中央處理器統計信息

iostat 用於報告中央處理器(CPU)統計信息和整個系統、適配器、tty 設備、磁盤和 CD-ROM 的輸入 / 輸出統計信息,默認顯示了與 vmstat 相同的 cpu 使用信息,使用以下命令顯示擴展的設備統計:

第一行顯示的是自系統啓動以來的平均值,然後顯示增量的平均值,每個設備一行。

常見 linux 的磁盤 IO 指標的縮寫習慣:rq 是 request,r 是 read,w 是 write,qu 是 queue,sz 是 size,a 是 verage,tm 是 time,svc 是 service。

dstat-- 系統監控工具

dstat 顯示了 cpu 使用情況,磁盤 io 情況,網絡發包情況和換頁情況,輸出是彩色的,可讀性較強,相對於 vmstat 和 iostat 的輸入更加詳細且較爲直觀。在使用時,直接輸入命令即可,當然也可以使用特定參數。

如下:dstat –cdlmnpsy

iotop--LINUX 進程實時監控工具


iotop 命令是專門顯示硬盤 IO 的命令,界面風格類似 top 命令,可以顯示 IO 負載具體是由哪個進程產生的。是一個用來監視磁盤 I/O 使用狀況的 top 類工具,具有與 top 相似的 UI,其中包括 PID、用戶、I/O、進程等相關信息。

可以以非交互的方式使用:

iotop –bod interval,查看每個進程的I/O,可以使用pidstat,pidstat –d instat

pidstat-- 監控系統資源情況

pidstat 主要用於監控全部或指定進程佔用系統資源的情況, 如 CPU, 內存、設備 IO、任務切換、線程等。

使用方法:

pidstat –d interval
#統計CPU使用信息
pidstat –u interval
#統計內存信息
Pidstat –r interval

top

top 命令的彙總區域顯示了五個方面的系統性能信息:

任務區域默認顯示:進程 ID, 有效用戶,進程優先級,NICE 值,進程使用的虛擬內存,物理內存和共享內存,進程狀態,CPU 佔用率,內存佔用率,累計 CPU 時間,進程命令行信息。

htop

htop 是 Linux 系統中的一個互動的進程查看器, 一個文本模式的應用程序 (在控制檯或者 X 終端中), 需要 ncurses。

Htop 可讓用戶交互式操作,支持顏色主題,可橫向或縱向滾動瀏覽進程列表,並支持鼠標操作。

與 top 相比,htop 有以下優點:

mpstat

mpstat 是 Multiprocessor Statistics 的縮寫,是實時系統監控工具。其報告與 CPU 的一些統計信息,這些信息存放在 / proc/stat 文件中。在多 CPUs 系統裏,其不但能查看所有 CPU 的平均狀況信息,而且能夠查看特定 CPU 的信息。常見用法:

mpstat –P ALL interval times

netstat

Netstat 用於顯示與 IP、TCP、UDP 和 ICMP 協議相關的統計數據,一般用於檢驗本機各端口的網絡連接情況。

常見用法:

netstat –npl   #可以查看你要打開的端口是否已經打開。
netstat –rn    #打印路由表信息。
netstat –in    #提供系統上的接口信息,打印每個接口的MTU,輸入分組數,輸入錯誤,輸出分組數,輸出錯誤,衝突以及當前的輸出隊列的長度。

ps-- 顯示當前進程的狀態

ps 參數太多,具體使用方法可以參考 man ps,

常用的方法:

ps  aux  #hsserver
ps –ef |grep #hundsun

#殺掉某一程序的方法
ps  aux | grep mysqld | grep –v grep | awk ‘{print $2 }’ xargs kill -9

#殺掉殭屍進程
ps –eal | awk ‘{if ($2 == “Z”){print $4}}’ | xargs kill -9

strace

跟蹤程序執行過程中產生的系統調用及接收到的信號,幫助分析程序或命令執行中遇到的異常情況。

舉例:查看 mysqld 在 linux 上加載哪種配置文件,可以通過運行下面的命令:

strace –e stat64 mysqld –print –defaults > /dev/null

uptime

能夠打印系統總共運行了多長時間和系統的平均負載,uptime 命令最後輸出的三個數字的含義分別是 1 分鐘,5 分鐘,15 分鐘內系統的平均負荷。

lsof

lsof(list open files) 是一個列出當前系統打開文件的工具。通過 lsof 工具能夠查看這個列表對系統檢測及排錯,常見的用法:

#查看文件系統阻塞  
lsof /boot

#查看端口號被哪個進程佔用   
lsof  -i : 3306

#查看用戶打開哪些文件   
lsof –u username

#查看進程打開哪些文件   
lsof –p  4838

#查看遠程已打開的網絡鏈接  
lsof –i @192.168.34.128

perf

perf 是 Linux kernel 自帶的系統性能優化工具。優勢在於與 Linux Kernel 的緊密結合,它可以最先應用到加入 Kernel 的 new feature,用於查看熱點函數,查看 cashe miss 的比率,從而幫助開發者來優化程序性能。

性能調優工具如 perf,Oprofile 等的基本原理都是對被監測對象進行採樣,最簡單的情形是根據 tick 中斷進行採樣,即在 tick 中斷內觸發採樣點,在採樣點裏判斷程序當時的上下文。假如一個程序 90% 的時間都花費在函數 foo() 上,那麼 90% 的採樣點都應該落在函數 foo() 的上下文中。運氣不可捉摸,但我想只要採樣頻率足夠高,採樣時間足夠長,那麼以上推論就比較可靠。因此,通過 tick 觸發採樣,我們便可以瞭解程序中哪些地方最耗時間,從而重點分析。

彙總:結合以上常用的性能測試命令並聯系文初的性能分析工具的圖,就可以初步瞭解到性能分析過程中哪個方面的性能使用哪方面的工具(命令)。

常用的性能測試工具

熟練並精通了第二部分的性能分析命令工具,引入幾個性能測試的工具,介紹之前先簡單瞭解幾個性能測試工具:

一款隨 Linux 內核代碼一同發佈和維護的性能診斷工具,由內核社區維護和發展。Perf 不僅可以用於應用程序的性能統計分析,也可以應用於內核代碼的性能統計和分析。

eBPF tools

一款使用 bcc 進行的性能追蹤的工具, eBPF map 可以使用定製的 eBPF 程序被廣泛應用於內核調優方面,也可以讀取用戶級的異步代碼。重要的是這個外部的數據可以在用戶空間管理。這個 k-v 格式的 map 數據體是通過在用戶空間調用 bpf 系統調用創建、添加、刪除等操作管理的。

perf-tools:

一款基於 perf_events (perf) 和 ftrace 的 Linux 性能分析調優工具集。Perf-Tools 依賴庫少,使用簡單。支持 Linux 3.2 及以上內核版本。

bcc(BPF Compiler Collection)

一款使用 eBPF 的 perf 性能分析工具。一個用於創建高效的內核跟蹤和操作程序的工具包,包括幾個有用的工具和示例。利用擴展的 BPF(伯克利數據包過濾器),正式稱爲 eBPF,一個新的功能,首先被添加到 Linux 3.15。多用途需要 Linux 4.1 以上 BCC。

ktap

一種新型的 linux 腳本動態性能跟蹤工具。允許用戶跟蹤 Linux 內核動態。ktap 是設計給具有互操作性,允許用戶調整操作的見解,排除故障和延長內核和應用程序。它類似於 Linux 和 Solaris DTrace SystemTap。

Flame Graphs

是一款使用 perf,system tap,ktap 可視化的圖形軟件,允許最頻繁的代碼路徑快速準確地識別,可以是使用 github.com/brendangregg/flamegraph 中的開發源代碼的程序生成。

Linux observability tools | Linux 性能觀測工具首先學習的 Basic Tool 有如下:


uptime、top(htop)、mpstat、isstat、vmstat、free、ping、nicstat、dstat。

高級的命令如下:

sar、netstat、pidstat、strace、tcpdump、blktrace、iotop、slabtop、sysctl、/proc。

Linux benchmarking tools | Linux 性能測評工具

是一款性能測評工具,對於不同模塊的性能測試可以使用相應的工具,想要深入瞭解,可以參考最下文的附件文檔。

Linux tuning tools | Linux 性能調優工具

是一款性能調優工具,主要是從 linux 內核源碼層進行的調優,想要深入瞭解,可以參考下文附件文檔。

Linux observability sar | linux 性能觀測工具

sar(System Activity Reporter 系統活動情況報告)是目前 LINUX 上最爲全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告,包括:文件的讀寫情況、系統調用的使用情況、磁盤 I/O、CPU 效率、內存使用狀況、進程活動及 IPC 有關的活動等方面。

sar 的常歸使用方式:

sar  [options] [-A] [-o file]  t [n]

其中:

t         #爲採樣間隔,n爲採樣次數,默認值是1;
-o file   #表示將命令結果以二進制格式存放在文件中,file 是文件名。
options   #爲命令行選項
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/wzn5WS0vTzRWAl0priPCTA