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

圖片

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

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

性能分析工具

首先來看一張圖:linux

圖片

上圖是Brendan Gregg 的一次性能分析的分享,這裏面的全部工具均可以經過man來得到它的幫助文檔,下問簡單介紹介紹一下常規的用法:ios

vmstat--虛擬內存統計

vmstat(VirtualMeomoryStatistics,虛擬內存統計) 是Linux中監控內存的經常使用工具,可對操做系統的虛擬內存、進程、CPU等的總體狀況進行監視。git

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

圖片

可使用ctrl+c中止vmstat採集數據。sql

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

  • procs:r這一列顯示了多少進程在等待cpu,b列顯示多少進程正在不可中斷的休眠(等待IO)。
  • memory:swapd列顯示了多少塊被換出了磁盤(頁面交換),剩下的列顯示了多少塊是空閒的(未被使用),多少塊正在被用做緩衝區,以及多少正在被用做操做系統的緩存。
  • swap:顯示交換活動:每秒有多少塊正在被換入(從磁盤)和換出(到磁盤)。
  • io:顯示了多少塊從塊設備讀取(bi)和寫出(bo),一般反映了硬盤I/O。
  • system:顯示每秒中斷(in)和上下文切換(cs)的數量。
  • cpu:顯示全部的cpu時間花費在各種操做的百分比,包括執行用戶代碼(非內核),執行系統代碼(內核),空閒以及等待IO。

內存不足的表現: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。

  • rrqm/s和wrqm/s:每秒合併的讀和寫請求,「合併的」意味着操做系統從隊列中拿出多個邏輯請求合併爲一個請求到實際磁盤。
  • r/s和w/s:每秒發送到設備的讀和寫請求數。
  • rsec/s和wsec/s:每秒讀和寫的扇區數。
  • avgrq –sz:請求的扇區數。
  • avgqu –sz:在設備隊列中等待的請求數。
  • await:每一個IO請求花費的時間。
  • svctm:實際請求(服務)時間。
  • %util:至少有一個活躍請求所佔時間的百分比。

dstat--系統監控工具

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

以下:dstat –cdlmnpsy

image.png

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命令的彙總區域顯示了五個方面的系統性能信息:

  • 負載:時間,登錄用戶數,系統平均負載;
  • 進程:運行,睡眠,中止,殭屍;
  • cpu:用戶態,核心態,NICE,空閒,等待IO,中斷等;
  • 內存:總量,已用,空閒(系統角度),緩衝,緩存;
  • 交換分區:總量,已用,空閒

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

htop

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

圖片

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

與top相比,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 觸發採樣,咱們即可以瞭解程序中哪些地方最耗時間,從而重點分析。

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

經常使用的性能測試工具

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

perf_events

一款隨 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。Linux性能檢測經常使用的10個基本命令

高級的命令以下:

sar、netstat、pidstat、strace、tcpdump、blktrace、iotop、slabtop、sysctl、/proc。值得收藏!Linux系統經常使用命令速查手冊

Linux benchmarking tools | Linux 性能測評工具

圖片

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

Linux tuning tools | Linux 性能調優工具

圖片

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

Linux observability sar | linux性能觀測工具

image.png

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

sar的常歸使用方式:

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

其中:

t         #爲採樣間隔,n爲採樣次數,默認值是1;
-o file   #表示將命令結果以二進制格式存放在文件中,file 是文件名。
options   #爲命令行選項

來源:https://rdc.hundsun.com/porta...

image

相關文章
相關標籤/搜索