<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 7338字,需瀏覽 15分鐘

           ·

          2021-03-26 08:30

          公眾號(hào)關(guān)注“杰哥的IT之旅”,
          選擇“星標(biāo)”,重磅干貨,第一時(shí)間送達(dá)!

          出于對(duì)Linux操作系統(tǒng)的興趣,以及對(duì)底層知識(shí)的強(qiáng)烈欲望,因此整理了這篇文章。本文也可以作為檢驗(yàn)基礎(chǔ)知識(shí)的指標(biāo),另外文章涵蓋了一個(gè)系統(tǒng)的方方面面。如果沒(méi)有完善的計(jì)算機(jī)系統(tǒng)知識(shí),網(wǎng)絡(luò)知識(shí)和操作系統(tǒng)知識(shí),文檔中的工具,是不可能完全掌握的,另外對(duì)系統(tǒng)性能分析和優(yōu)化是一個(gè)長(zhǎng)期的系列。

          本文檔主要是結(jié)合Linux 大牛,Netflix 高級(jí)性能架構(gòu)師 Brendan Gregg 更新 Linux 性能調(diào)優(yōu)工具的博文,搜集Linux系統(tǒng)性能優(yōu)化相關(guān)文章整理后的一篇綜合性文章,主要是結(jié)合博文對(duì)涉及到的原理和性能測(cè)試的工具展開(kāi)說(shuō)明。

          性能分析工具

          首先來(lái)看一張圖:

          上圖是Brendan Gregg 的一次性能分析的分享,這里面的所有工具都可以通過(guò)man來(lái)獲得它的幫助文檔,下問(wèn)簡(jiǎn)單介紹介紹一下常規(guī)的用法:

          vmstat--虛擬內(nèi)存統(tǒng)計(jì)

          vmstat(VirtualMeomoryStatistics,虛擬內(nèi)存統(tǒng)計(jì)) 是Linux中監(jiān)控內(nèi)存的常用工具,可對(duì)操作系統(tǒng)的虛擬內(nèi)存、進(jìn)程、CPU等的整體情況進(jìn)行監(jiān)視。

          vmstat的常規(guī)用法:vmstat interval times即每隔interval秒采樣一次,共采樣times次,如果省略times,則一直采集數(shù)據(jù),直到用戶(hù)手動(dòng)停止為止。

          簡(jiǎn)單舉個(gè)例子:

          可以使用ctrl+c停止vmstat采集數(shù)據(jù)。

          第一行顯示了系統(tǒng)自啟動(dòng)以來(lái)的平均值,第二行開(kāi)始顯示現(xiàn)在正在發(fā)生的情況,接下來(lái)的行會(huì)顯示每5秒間隔發(fā)生了什么,每一列的含義在頭部,如下所示:

          • procs:r這一列顯示了多少進(jìn)程在等待cpu,b列顯示多少進(jìn)程正在不可中斷的休眠(等待IO)。

          • memory:swapd列顯示了多少塊被換出了磁盤(pán)(頁(yè)面交換),剩下的列顯示了多少塊是空閑的(未被使用),多少塊正在被用作緩沖區(qū),以及多少正在被用作操作系統(tǒng)的緩存。

          • swap:顯示交換活動(dòng):每秒有多少塊正在被換入(從磁盤(pán))和換出(到磁盤(pán))。

          • io:顯示了多少塊從塊設(shè)備讀?。╞i)和寫(xiě)出(bo),通常反映了硬盤(pán)I/O。

          • system:顯示每秒中斷(in)和上下文切換(cs)的數(shù)量。

          • cpu:顯示所有的cpu時(shí)間花費(fèi)在各類(lèi)操作的百分比,包括執(zhí)行用戶(hù)代碼(非內(nèi)核),執(zhí)行系統(tǒng)代碼(內(nèi)核),空閑以及等待IO。

          內(nèi)存不足的表現(xiàn):free  memory急劇減少,回收buffer和cacher也無(wú)濟(jì)于事,大量使用交換分區(qū)(swpd),頁(yè)面交換(swap)頻繁,讀寫(xiě)磁盤(pán)數(shù)量(io)增多,缺頁(yè)中斷(in)增多,上下文切換(cs)次數(shù)增多,等待IO的進(jìn)程數(shù)(b)增多,大量CPU時(shí)間用于等待IO(wa)

          iostat--用于報(bào)告中央處理器統(tǒng)計(jì)信息

          iostat用于報(bào)告中央處理器(CPU)統(tǒng)計(jì)信息和整個(gè)系統(tǒng)、適配器、tty 設(shè)備、磁盤(pán)和 CD-ROM 的輸入/輸出統(tǒng)計(jì)信息,默認(rèn)顯示了與vmstat相同的cpu使用信息,使用以下命令顯示擴(kuò)展的設(shè)備統(tǒng)計(jì):

          第一行顯示的是自系統(tǒng)啟動(dòng)以來(lái)的平均值,然后顯示增量的平均值,每個(gè)設(shè)備一行。

          常見(jiàn)linux的磁盤(pán)IO指標(biāo)的縮寫(xiě)習(xí)慣:rq是request,r是read,w是write,qu是queue,sz是size,a是verage,tm是time,svc是service。

          • rrqm/s和wrqm/s:每秒合并的讀和寫(xiě)請(qǐng)求,“合并的”意味著操作系統(tǒng)從隊(duì)列中拿出多個(gè)邏輯請(qǐng)求合并為一個(gè)請(qǐng)求到實(shí)際磁盤(pán)。

          • r/s和w/s:每秒發(fā)送到設(shè)備的讀和寫(xiě)請(qǐng)求數(shù)。

          • rsec/s和wsec/s:每秒讀和寫(xiě)的扇區(qū)數(shù)。

          • avgrq –sz:請(qǐng)求的扇區(qū)數(shù)。

          • avgqu –sz:在設(shè)備隊(duì)列中等待的請(qǐng)求數(shù)。

          • await:每個(gè)IO請(qǐng)求花費(fèi)的時(shí)間。

          • svctm:實(shí)際請(qǐng)求(服務(wù))時(shí)間。

          • %util:至少有一個(gè)活躍請(qǐng)求所占時(shí)間的百分比。

          dstat--系統(tǒng)監(jiān)控工具

          dstat顯示了cpu使用情況,磁盤(pán)io情況,網(wǎng)絡(luò)發(fā)包情況和換頁(yè)情況,輸出是彩色的,可讀性較強(qiáng),相對(duì)于vmstat和iostat的輸入更加詳細(xì)且較為直觀。在使用時(shí),直接輸入命令即可,當(dāng)然也可以使用特定參數(shù)。

          如下:dstat –cdlmnpsy

          iotop--LINUX進(jìn)程實(shí)時(shí)監(jiān)控工具

          iotop命令是專(zhuān)門(mén)顯示硬盤(pán)IO的命令,界面風(fēng)格類(lèi)似top命令,可以顯示IO負(fù)載具體是由哪個(gè)進(jìn)程產(chǎn)生的。是一個(gè)用來(lái)監(jiān)視磁盤(pán)I/O使用狀況的top類(lèi)工具,具有與top相似的UI,其中包括PID、用戶(hù)、I/O、進(jìn)程等相關(guān)信息。

          可以以非交互的方式使用:iotop –bod interval,查看每個(gè)進(jìn)程的I/O,可以使用pidstat,pidstat –d instat。

          pidstat--監(jiān)控系統(tǒng)資源情況

          pidstat主要用于監(jiān)控全部或指定進(jìn)程占用系統(tǒng)資源的情況,如CPU,內(nèi)存、設(shè)備IO、任務(wù)切換、線(xiàn)程等。

          使用方法:pidstat –d interval;pidstat還可以用以統(tǒng)計(jì)CPU使用信息:pidstat –u interval;統(tǒng)計(jì)內(nèi)存信息:Pidstat –r interval。

          top

          top命令的匯總區(qū)域顯示了五個(gè)方面的系統(tǒng)性能信息:

          • 負(fù)載:時(shí)間,登陸用戶(hù)數(shù),系統(tǒng)平均負(fù)載;

          • 進(jìn)程:運(yùn)行,睡眠,停止,僵尸;

          • cpu:用戶(hù)態(tài),核心態(tài),NICE,空閑,等待IO,中斷等;

          • 內(nèi)存:總量,已用,空閑(系統(tǒng)角度),緩沖,緩存;

          • 交換分區(qū):總量,已用,空閑

          任務(wù)區(qū)域默認(rèn)顯示:進(jìn)程ID,有效用戶(hù),進(jìn)程優(yōu)先級(jí),NICE值,進(jìn)程使用的虛擬內(nèi)存,物理內(nèi)存和共享內(nèi)存,進(jìn)程狀態(tài),CPU占用率,內(nèi)存占用率,累計(jì)CPU時(shí)間,進(jìn)程命令行信息。

          htop

          htop 是Linux系統(tǒng)中的一個(gè)互動(dòng)的進(jìn)程查看器,一個(gè)文本模式的應(yīng)用程序(在控制臺(tái)或者X終端中),需要ncurses。

          Htop可讓用戶(hù)交互式操作,支持顏色主題,可橫向或縱向滾動(dòng)瀏覽進(jìn)程列表,并支持鼠標(biāo)操作。

          與top相比,htop有以下優(yōu)點(diǎn):

          • 可以橫向或者縱向滾動(dòng)瀏覽進(jìn)程列表,以便看到所有的進(jìn)程和完整的命令行。

          • 在啟動(dòng)上,比top更快。

          • 殺進(jìn)程時(shí)不需要輸入進(jìn)程號(hào)。

          • htop支持鼠標(biāo)操作。

          mpstat

          mpstat 是Multiprocessor Statistics的縮寫(xiě),是實(shí)時(shí)系統(tǒng)監(jiān)控工具。其報(bào)告與CPU的一些統(tǒng)計(jì)信息,這些信息存放在/proc/stat文件中。在多CPUs系統(tǒng)里,其不但能查看所有CPU的平均狀況信息,而且能夠查看特定CPU的信息。常見(jiàn)用法:mpstat –P ALL interval times。

          netstat

          Netstat用于顯示與IP、TCP、UDP和ICMP協(xié)議相關(guān)的統(tǒng)計(jì)數(shù)據(jù),一般用于檢驗(yàn)本機(jī)各端口的網(wǎng)絡(luò)連接情況。

          常見(jiàn)用法:

          netstat –npl   可以查看你要打開(kāi)的端口是否已經(jīng)打開(kāi)。

          netstat –rn    打印路由表信息。

          netstat –in    提供系統(tǒng)上的接口信息,打印每個(gè)接口的MTU,輸入分組數(shù),輸入錯(cuò)誤,輸出分組數(shù),輸出錯(cuò)誤,沖突以及當(dāng)前的輸出隊(duì)列的長(zhǎng)度。

          ps--顯示當(dāng)前進(jìn)程的狀態(tài)

          ps參數(shù)太多,具體使用方法可以參考man ps,常用的方法:ps  aux  #hsserver;ps –ef |grep #hundsun

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

          殺掉僵尸進(jìn)程:ps –eal | awk ‘{if ($2 == “Z”){print $4}}’ | xargs kill -9

          strace

          跟蹤程序執(zhí)行過(guò)程中產(chǎn)生的系統(tǒng)調(diào)用及接收到的信號(hào),幫助分析程序或命令執(zhí)行中遇到的異常情況。

          舉例:查看mysqld在linux上加載哪種配置文件,可以通過(guò)運(yùn)行下面的命令:strace –e stat64 mysqld –print –defaults > /dev/null

          uptime

          能夠打印系統(tǒng)總共運(yùn)行了多長(zhǎng)時(shí)間和系統(tǒng)的平均負(fù)載,uptime命令最后輸出的三個(gè)數(shù)字的含義分別是1分鐘,5分鐘,15分鐘內(nèi)系統(tǒng)的平均負(fù)荷。

          lsof

          lsof(list open files)是一個(gè)列出當(dāng)前系統(tǒng)打開(kāi)文件的工具。通過(guò)lsof工具能夠查看這個(gè)列表對(duì)系統(tǒng)檢測(cè)及排錯(cuò),常見(jiàn)的用法:

          查看文件系統(tǒng)阻塞  lsof /boot
          查看端口號(hào)被哪個(gè)進(jìn)程占用   lsof  -i : 3306
          查看用戶(hù)打開(kāi)哪些文件   lsof –u username
          查看進(jìn)程打開(kāi)哪些文件   lsof –p  4838
          查看遠(yuǎn)程已打開(kāi)的網(wǎng)絡(luò)鏈接  lsof –i @192.168.34.128

          perf

          perf是Linux kernel自帶的系統(tǒng)性能優(yōu)化工具。優(yōu)勢(shì)在于與Linux Kernel的緊密結(jié)合,它可以最先應(yīng)用到加入Kernel的new feature,用于查看熱點(diǎn)函數(shù),查看cashe miss的比率,從而幫助開(kāi)發(fā)者來(lái)優(yōu)化程序性能。

          性能調(diào)優(yōu)工具如 perf,Oprofile 等的基本原理都是對(duì)被監(jiān)測(cè)對(duì)象進(jìn)行采樣,最簡(jiǎn)單的情形是根據(jù) tick 中斷進(jìn)行采樣,即在 tick 中斷內(nèi)觸發(fā)采樣點(diǎn),在采樣點(diǎn)里判斷程序當(dāng)時(shí)的上下文。假如一個(gè)程序 90% 的時(shí)間都花費(fèi)在函數(shù) foo() 上,那么 90% 的采樣點(diǎn)都應(yīng)該落在函數(shù) foo() 的上下文中。運(yùn)氣不可捉摸,但我想只要采樣頻率足夠高,采樣時(shí)間足夠長(zhǎng),那么以上推論就比較可靠。因此,通過(guò) tick 觸發(fā)采樣,我們便可以了解程序中哪些地方最耗時(shí)間,從而重點(diǎn)分析。

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

          匯總:結(jié)合以上常用的性能測(cè)試命令并聯(lián)系文初的性能分析工具的圖,就可以初步了解到性能分析過(guò)程中哪個(gè)方面的性能使用哪方面的工具(命令)。

          strace

          跟蹤程序執(zhí)行過(guò)程中產(chǎn)生的系統(tǒng)調(diào)用及接收到的信號(hào),幫助分析程序或命令執(zhí)行中遇到的異常情況。

          舉例:查看mysqld在linux上加載哪種配置文件,可以通過(guò)運(yùn)行下面的命令:strace –e stat64 mysqld –print –defaults > /dev/null

          uptime

          能夠打印系統(tǒng)總共運(yùn)行了多長(zhǎng)時(shí)間和系統(tǒng)的平均負(fù)載,uptime命令最后輸出的三個(gè)數(shù)字的含義分別是1分鐘,5分鐘,15分鐘內(nèi)系統(tǒng)的平均負(fù)荷。

          lsof

          lsof(list open files)是一個(gè)列出當(dāng)前系統(tǒng)打開(kāi)文件的工具。通過(guò)lsof工具能夠查看這個(gè)列表對(duì)系統(tǒng)檢測(cè)及排錯(cuò),常見(jiàn)的用法:

          查看文件系統(tǒng)阻塞  lsof /boot
          查看端口號(hào)被哪個(gè)進(jìn)程占用   lsof  -i : 3306
          查看用戶(hù)打開(kāi)哪些文件   lsof –u username
          查看進(jìn)程打開(kāi)哪些文件   lsof –p  4838
          查看遠(yuǎn)程已打開(kāi)的網(wǎng)絡(luò)鏈接  lsof –i @192.168.34.128

          perf

          perf是Linux kernel自帶的系統(tǒng)性能優(yōu)化工具。優(yōu)勢(shì)在于與Linux Kernel的緊密結(jié)合,它可以最先應(yīng)用到加入Kernel的new feature,用于查看熱點(diǎn)函數(shù),查看cashe miss的比率,從而幫助開(kāi)發(fā)者來(lái)優(yōu)化程序性能。

          性能調(diào)優(yōu)工具如 perf,Oprofile 等的基本原理都是對(duì)被監(jiān)測(cè)對(duì)象進(jìn)行采樣,最簡(jiǎn)單的情形是根據(jù) tick 中斷進(jìn)行采樣,即在 tick 中斷內(nèi)觸發(fā)采樣點(diǎn),在采樣點(diǎn)里判斷程序當(dāng)時(shí)的上下文。假如一個(gè)程序 90% 的時(shí)間都花費(fèi)在函數(shù) foo() 上,那么 90% 的采樣點(diǎn)都應(yīng)該落在函數(shù) foo() 的上下文中。運(yùn)氣不可捉摸,但我想只要采樣頻率足夠高,采樣時(shí)間足夠長(zhǎng),那么以上推論就比較可靠。因此,通過(guò) tick 觸發(fā)采樣,我們便可以了解程序中哪些地方最耗時(shí)間,從而重點(diǎn)分析。

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

          匯總:結(jié)合以上常用的性能測(cè)試命令并聯(lián)系文初的性能分析工具的圖,就可以初步了解到性能分析過(guò)程中哪個(gè)方面的性能使用哪方面的工具(命令)。

          常用的性能測(cè)試工具

          熟練并精通了第二部分的性能分析命令工具,引入幾個(gè)性能測(cè)試的工具,介紹之前先簡(jiǎn)單了解幾個(gè)性能測(cè)試工具:

          • perf_events: 一款隨 Linux 內(nèi)核代碼一同發(fā)布和維護(hù)的性能診斷工具,由內(nèi)核社區(qū)維護(hù)和發(fā)展。Perf 不僅可以用于應(yīng)用程序的性能統(tǒng)計(jì)分析,也可以應(yīng)用于內(nèi)核代碼的性能統(tǒng)計(jì)和分析。

          更多參考:

          http://blog.sina.com.cn/s/blog_98822316010122ex.html。

          • eBPF tools: 一款使用bcc進(jìn)行的性能追蹤的工具,eBPF map可以使用定制的eBPF程序被廣泛應(yīng)用于內(nèi)核調(diào)優(yōu)方面,也可以讀取用戶(hù)級(jí)的異步代碼。重要的是這個(gè)外部的數(shù)據(jù)可以在用戶(hù)空間管理。這個(gè)k-v格式的map數(shù)據(jù)體是通過(guò)在用戶(hù)空間調(diào)用bpf系統(tǒng)調(diào)用創(chuàng)建、添加、刪除等操作管理的。

          more: 

          http://blog.csdn.net/ljy1988123/article/details/50444693。

          • perf-tools: 一款基于 perf_events (perf) 和 ftrace 的Linux性能分析調(diào)優(yōu)工具集。Perf-Tools 依賴(lài)庫(kù)少,使用簡(jiǎn)單。支持Linux 3.2 及以上內(nèi)核版本。

          more: 

          https://github.com/brendangregg/perf-tools。

          • bcc(BPF Compiler Collection): 一款使用eBPF的perf性能分析工具。一個(gè)用于創(chuàng)建高效的內(nèi)核跟蹤和操作程序的工具包,包括幾個(gè)有用的工具和示例。利用擴(kuò)展的BPF(伯克利數(shù)據(jù)包過(guò)濾器),正式稱(chēng)為eBPF,一個(gè)新的功能,首先被添加到Linux 3.15。多用途需要Linux 4.1以上BCC。

          更多參考:

          https://github.com/iovisor/bcc#tools。

          • ktap: 一種新型的linux腳本動(dòng)態(tài)性能跟蹤工具。允許用戶(hù)跟蹤Linux內(nèi)核動(dòng)態(tài)。ktap是設(shè)計(jì)給具有互操作性,允許用戶(hù)調(diào)整操作的見(jiàn)解,排除故障和延長(zhǎng)內(nèi)核和應(yīng)用程序。它類(lèi)似于Linux和Solaris DTrace SystemTap。

          更多參考:

          https://github.com/ktap/ktap。

          • Flame Graphs:是一款使用perf,system tap,ktap可視化的圖形軟件,允許最頻繁的代碼路徑快速準(zhǔn)確地識(shí)別,可以是使用github.com/brendangregg/flamegraph中的開(kāi)發(fā)源代碼的程序生成。

          更多參考:

          http://www.brendangregg.com/flamegraphs.html。

          Linux observability tools | Linux 性能觀測(cè)工具

          • 首先學(xué)習(xí)的Basic Tool有如下:
            uptime、top(htop)、mpstat、isstat、vmstat、free、ping、nicstat、dstat。

          • 高級(jí)的命令如下:
            sar、netstat、pidstat、strace、tcpdump、blktrace、iotop、slabtop、sysctl、/proc。

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

          Linux benchmarking tools | Linux 性能測(cè)評(píng)工具

          是一款性能測(cè)評(píng)工具,對(duì)于不同模塊的性能測(cè)試可以使用相應(yīng)的工具,想要深入了解,可以參考最下文的附件文檔。

          Linux tuning tools | Linux 性能調(diào)優(yōu)工具

          是一款性能調(diào)優(yōu)工具,主要是從linux內(nèi)核源碼層進(jìn)行的調(diào)優(yōu),想要深入了解,可以參考下文附件文檔。

          Linux observability sar | linux性能觀測(cè)工具

          sar(System Activity Reporter系統(tǒng)活動(dòng)情況報(bào)告)是目前LINUX上最為全面的系統(tǒng)性能分析工具之一,可以從多方面對(duì)系統(tǒng)的活動(dòng)進(jìn)行報(bào)告,包括:文件的讀寫(xiě)情況、系統(tǒng)調(diào)用的使用情況、磁盤(pán)I/O、CPU效率、內(nèi)存使用狀況、進(jìn)程活動(dòng)及IPC有關(guān)的活動(dòng)等方面。

          sar的常歸使用方式:

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

          其中:

          t         #為采樣間隔,n為采樣次數(shù),默認(rèn)值是1;
          -o file   #表示將命令結(jié)果以二進(jìn)制格式存放在文件中,file 是文件名。
          options   #為命令行選項(xiàng)

          推薦閱讀

          6 個(gè) JVM 性能監(jiān)控、調(diào)優(yōu)工具使用詳解!

          提升系統(tǒng) 10 倍性能的 10 個(gè)建議!

          全面解析 52 條 SQL 語(yǔ)句性能優(yōu)化策略,建議收藏!

          超詳細(xì)的 Tomcat 性能監(jiān)控及調(diào)優(yōu)教程

          速度快,性能好!壓縮神器 zstd

          Linux 性能調(diào)優(yōu)的思路

          Oracle SQL 性能優(yōu)化40條,必看!

          提升Python程序性能的7個(gè)習(xí)慣

          Linux 性能監(jiān)控、測(cè)試、優(yōu)化工具

          瀏覽 33
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  俺操也| 黄色第一页 | 无码成人在线观看 | 美女操逼免费视频 | 亚洲高清毛片一区二区 |