首頁  >  文章  >  運維  >  超全整理 - Linux效能分析工具總合集

超全整理 - Linux效能分析工具總合集

Linux中文社区
Linux中文社区轉載
2023-08-03 16:20:12966瀏覽

對Linux作業系統的興趣,以及對底層知識的強烈慾望,因此整理了這篇文章。本文也可以作為檢驗基礎知識的指標,另外文章涵蓋了一個系統的各個層面。如果沒有完善的電腦系統知識,網路知識和作業系統知識,文件中的工具,是不可能完全掌握的,另外對系統效能分析和最佳化是一個長期的系列。


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


背景知識:具備背景知識是分析效能問題時需要了解的。例如硬體 cache;再例如作業系統核心。應用程式的行為細節往往是和這些東西互相牽扯的,這些底層的東西會以意想不到的方式影響應用程式的效能,例如某些程式無法充分利用 cache,從而導致效能下降。例如不必要地調用過多的系統調用,造成頻繁的內核 / 用戶切換等。這裡只是為本文的後續內容做一些鋪墊,關於調優還有很多東西,我所不知道的比知道的要多的多,希望大家能共同學習進步。


【效能分析工具】

#

首先來看一張圖:

超全整理 - Linux效能分析工具總合集

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


▲ vmstat--虛擬記憶體統計

vmstat(VirtualMeomoryStatistics,虛擬記憶體統計) 是Linux中監控記憶體的常用工具,可監控作業系統的虛擬記憶體、行程、CPU等的整體狀況。


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

超全整理 - Linux效能分析工具總合集

#可以使用ctrl c停止vmstat來擷取資料。


#

第一行顯示了系統自啟動以來的平均值,第二行開始顯示現在正在發生的情況,接下來的行會顯示每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效能分析工具總合集

##第一行顯示的是自系統啟動以來的平均值,然後顯示增量的平均值,每個裝置一行。

常見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

超全整理 - Linux效能分析工具總合集


▲iotop- -LINUX進程即時監控工具

iotop指令是專門顯示硬碟IO的指令,介面風格類似top指令,可以顯示IO負載具體是由哪個行程產生的。是用來監視磁碟I/O使用狀況的top類工具,具有與top相似的UI,其中包括PID、使用者、I/O、進程等相關資訊。


可以以非互動的方式使用:iotop –bod interval,檢視每個行程的I/O,可以使用pidstat,pidstat –d instat。


搜尋公眾號Linux中文社群後台回覆「私房菜”,取得驚喜禮包。


▲pidstat--監控系統資源狀況

pidstat主要用於監控全部或指定進程佔用系統資源的情況,如CPU,記憶體、設備IO、任務切換、執行緒等。

使用方法:pidstat –d interval;pidstat也可以用以統計CPU使用資訊:pidstat –u interval;統計記憶體資訊:Pidstat –r interval。


#top

top指令的匯總區域顯示了五個面向的系統效能資訊:

1.負載:時間,登陸用戶數,系統平均負載;

#2.進程:運行,睡眠,停止,殭屍;

#3.cpu:用戶狀態,核心態,NICE,空閒,等待IO,中斷等;

4.記憶體:總量,已用,空閒(系統角度),緩衝,快取;

5.交換分區:總量,已使用,空閒

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


#htop

htop 是Linux系統中的一個互動的程序檢視器,一個文字模式的應用程式(在控制台或X終端機中),需要ncurses。
超全整理 - Linux效能分析工具總合集

Htop可讓使用者互動式操作,支援顏色主題,可橫向或縱向捲動進程列表,並支援滑鼠操作。

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

▪ 可以橫向或縱向捲動進程列表,以便看到所有的進程和完整的命令列。

▪ 在啟動上,比top快。

▪ 殺進程時不需要輸入進程號。

▪ htop支援滑鼠操作。


▲mpstat
#mpstat 是Multiprocessor Statistics的縮寫,是即時系統監控工具。其報告與CPU的一些統計信息,這些信息存放在/proc/stat文件中。在多CP​​Us系統裡,其不但能查看所有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 觸發採樣,我們便可以了解程式中哪些地方最耗時間,從而重點分析。


想要更深的了解本工具可以參考:
http://blog.csdn .net/trochiluses/article/details/10261339

#


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


【常用的效能測試工具】

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


#▪ perf_events: 一款隨Linux核心程式碼一同發布和維護的效能診斷工具,由核心社群維護發展。 Perf 不僅可以用於應用程式的效能統計分析,還可以應用於核心程式碼的效能統計和分析。

更多參考:http://blog.sina.com.cn/s/blog_98822316010122ex.html。


▪ eBPF tools: 一款使用bcc進行的效能追蹤的工具,eBPF map可以使用客製化的eBPF程序被廣泛應用於核心調優方面,也可以讀取用戶級的非同步程式碼。重要的是這個外部的資料可以在使用者空間管理。這個k-v格式的map資料體是透過在使用者空間呼叫bpf系統呼叫來建立、新增、刪除等操作來管理的。 more: http://blog.csdn.net/ljy1988123/article/details/50444693。


▪ perf-tools: 一款基於 perf_events (perf) 和 ftrace 的Linux效能分析調優工具集。 Perf-Tools 依賴函式庫少,使用簡單。支援Linux 3.2 及以上核心版本。 more: https://github.com/brendangregg/perf-tools。


▪ bcc(BPF Compiler Collection): 一款使用eBPF的perf效能分析工具。一個用於創建高效的核心追蹤和操作程序的工具包,包括幾個有用的工具和範例。利用擴展的BPF(伯克利資料包過濾器),正式稱為eBPF,一個新的功能,首先被添加到Linux 3.15。多用途需要Linux 4.1以上BCC。

更多參考:https://github.com/iovisor/bcc#tools。


▪ ktap: 一種新型的linux腳本動態效能追蹤工具。允許用戶追蹤Linux核心動態。 ktap是設計給具有互通性,允許使用者調整操作的見解,排除故障和延長核心和應用程式。它類似於Linux和Solaris DTrace SystemTap。更多參考:https://github.com/ktap/ktap。


▪ Flame Graphs:是一款使用perf,system tap,ktap視覺化的圖形軟體,允許最頻繁的程式碼路徑快速且準確地識別,可以是使用github.com/brendangregg/flamegraph中的開發原始程式碼的程式產生。

更多參考:http://www.brendangregg.com/flamegraphs.html。

一、 Linux observability tools | Linux 效能觀測工具

超全整理 - Linux效能分析工具總合集

▪ 先學習的Basic Tool有如下:
uptime、top(htop)、mpstat、isstat、vmstat、free 、ping、nicstat、dstat。


▪ 高階的指令如下:
sar、netstat、pidstat、strace、 tcpdump、blktrace、iotop、slabtop、sysctl、/proc。

更多參考:http://www.open-open.com/lib/view/open1434589043973.html,詳細的指令使用方法可以參考man

二、Linux benchmarking tools | Linux 效能評估工具

超全整理 - Linux效能分析工具總合集

##是一款效能評估工具,對於不同模組的效能測試可以使用對應的工具,想要深入了解,可以參考最下文的附件文件。


三、Linux tuning tools | Linux 效能調優工具

超全整理 - Linux效能分析工具總合集
是一款效能調優工具,主要是從linux核心原始碼層進行的調優,想要深入了解,可以參考下文附件文件。


四、Linux observability sar | linux效能觀測工具

超全整理 - 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 為命令列選項

以上是超全整理 - Linux效能分析工具總合集的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:Linux中文社区。如有侵權,請聯絡admin@php.cn刪除