1. 
          

          1. 新聞動(dòng)態(tài)

            超全整理!Linux 大牛收集的Linux性能分析工具合集

            網(wǎng)站建設 發(fā)布者:cya 2019-12-19 08:40 訪(fǎng)問(wèn)量:131

            來(lái)自:恒生研究院,作者:董西孝

            鏈接:http://rdc.hundsun.com/portal/article/731.html

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


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


            背景知識:具備背景知識是分析性能問(wèn)題時(shí)需要了解的。比如硬件 cache;再比如操作系統內核。應用程序的行為細節往往是和這些東西互相牽扯的,這些底層的東西會(huì )以意想不到的方式影響應用程序的性能,比如某些程序無(wú)法充分利用 cache,從而導致性能下降。比如不必要地調用過(guò)多的系統調用,造成頻繁的內核 / 用戶(hù)切換等。這里只是為本文的后續內容做一些鋪墊,關(guān)于調優(yōu)還有很多東西,我所不知道的比知道的要多的多,希望大家能共同學(xué)習進(jìn)步。

            【性能分析工具】

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


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


            ▲ vmstat--虛擬內存統計


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


            vmstat的常規用法:vmstat interval times即每隔interval秒采樣一次,共采樣times次,如果省略times,則一直采集數據,直到用戶(hù)手動(dòng)停止為止。
            簡(jiǎn)單舉個(gè)例子:

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


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

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

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

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

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

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

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

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


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


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



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

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


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

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

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

            • avgrq –sz:請求的扇區數。

            • avgqu –sz:在設備隊列中等待的請求數。

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

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

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


            ▲dstat--系統監控工具


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


            如下:dstat –cdlmnpsy



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


            iotop命令是專(zhuān)門(mén)顯示硬盤(pán)IO的命令,界面風(fēng)格類(lèi)似top命令,可以顯示IO負載具體是由哪個(gè)進(jìn)程產(chǎn)生的。是一個(gè)用來(lái)監視磁盤(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--監控系統資源情況


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

            使用方法:pidstat –d interval;pidstat還可以用以統計CPU使用信息:pidstat –u interval;統計內存信息:Pidstat –r interval。


            top


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


            1.負載:時(shí)間,登陸用戶(hù)數,系統平均負載;

            2.進(jìn)程:運行,睡眠,停止,僵尸;

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

            4.內存:總量,已用,空閑(系統角度),緩沖,緩存;

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


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


            htop


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


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


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


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

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

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

            • htop支持鼠標操作。


            ▲mpstat


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


            netstat


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


            ▲常見(jiàn)用法: 


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

            netstat –rn    打印路由表信息。

            netstat –in    提供系統上的接口信息,打印每個(gè)接口的MTU,輸入分組數,輸入錯誤,輸出分組數,輸出錯誤,沖突以及當前的輸出隊列的長(cháng)度。


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


            ps參數太多,具體使用方法可以參考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


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


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


            uptime


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


            lsof


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


            查看文件系統阻塞  lsof /boot

            查看端口號被哪個(gè)進(jìn)程占用   lsof  -i : 3306

            查看用戶(hù)打開(kāi)哪些文件   lsof –u username

            查看進(jìn)程打開(kāi)哪些文件   lsof –p  4838

            查看遠程已打開(kāi)的網(wǎng)絡(luò )鏈接  lsof –i @192.168.34.128


            perf


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


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

            【常用的性能測試工具】

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


            • perf_events: 一款隨 Linux 內核代碼一同發(fā)布和維護的性能診斷工具,由內核社區維護和發(fā)展。Perf 不僅可以用于應用程序的性能統計分析,也可以應用于內核代碼的性能統計和分析。


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


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


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


            • bcc(BPF Compiler Collection): 一款使用eBPF的perf性能分析工具。一個(gè)用于創(chuàng )建高效的內核跟蹤和操作程序的工具包,包括幾個(gè)有用的工具和示例。利用擴展的BPF(伯克利數據包過(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內核動(dòng)態(tài)。ktap是設計給具有互操作性,允許用戶(hù)調整操作的見(jiàn)解,排除故障和延長(cháng)內核和應用程序。它類(lèi)似于Linux和Solaris DTrace SystemTap。更多參考:https://github.com/ktap/ktap。


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

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

            最后我們再來(lái)回顧下這些性能檢測工具。

            一、 Linux observability tools | Linux 性能觀(guān)測工具



            • 首先學(xué)習的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 tuning tools | Linux 性能調優(yōu)工具




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


            四、Linux observability sar | linux性能觀(guān)測工具



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


            sar的常歸使用方式:sar  [options] [-A] [-o file]  t [n]
            其中:
            t為采樣間隔,n為采樣次數,默認值是1;
            -o file表示將命令結果以二進(jìn)制格式存放在文件中,file 是文件名。
            options 為命令行選項


            關(guān)鍵字: Linux 性能分析 晨展科技

            文章連接: http://www.gostscript.com/wzjss/648.html

            版權聲明:文章由 晨展科技 整理收集,來(lái)源于互聯(lián)網(wǎng)或者用戶(hù)投稿,如有侵權,請聯(lián)系我們,我們會(huì )立即刪除。如轉載請保留

            双腿国产亚洲精品无码不卡|国产91精品无码麻豆|97久久久久久久极品|无码人妻少妇久久中文字幕
                1.