国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

linux下性能分析工具Perf安裝與用法

這篇具有很好參考價值的文章主要介紹了linux下性能分析工具Perf安裝與用法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1、Perf介紹

2、火焰圖分類

?(1)CPU

?(2)Memory Flame Graphs

?(3)Off-CPU Flame Graphs

?(4)Hot/Cold Flame Graphs

?(5)Differential

?3、火焰圖安裝命令

(1)安裝Perf工具

(2)下載可視化工具FlameGraph

?4、火焰圖demo測試

(1)生成CPU火焰圖1

(2)火焰圖表解析

(3)當(dāng)前程序圖標(biāo)分析

a> 入口函數(shù)地址確定

b> 獲取對應(yīng)地址入口函數(shù)

?(4)生成火焰圖2

?(5)生成差分火焰圖


1、Perf介紹

perf是Linux下的一款性能分析工具,能夠進(jìn)行函數(shù)級與指令級的熱點查找。它由一個叫“Performance counters“的內(nèi)核子系統(tǒng)實現(xiàn),基于事件采樣原理,以性能事件為基礎(chǔ),支持針對處理器相關(guān)性能指標(biāo)與操作系統(tǒng)相關(guān)性能指標(biāo)的性能剖析,可用于性能瓶頸的查找與熱點代碼的定位。

Perf的主要功能和用途如下:

  1. 事件采樣:Perf使用硬件性能計數(shù)器來采樣事件,如CPU指令、緩存命中、緩存失效等,從而獲取系統(tǒng)在運行時的性能數(shù)據(jù)。

  2. 調(diào)用圖:Perf可以生成函數(shù)調(diào)用圖,顯示函數(shù)之間的調(diào)用關(guān)系和耗時,幫助識別程序的熱點和性能瓶頸。

  3. 火焰圖:火焰圖是Perf輸出的一種可視化圖表,它可以直觀地展示函數(shù)調(diào)用的耗時情況和函數(shù)的調(diào)用關(guān)系,以便快速準(zhǔn)確地識別最頻繁的代碼路徑,幫助快速定位性能瓶頸。

  4. 內(nèi)存分析:Perf可以收集內(nèi)存事件,如內(nèi)存訪問、缺頁異常等,幫助識別內(nèi)存性能問題。

  5. 鎖分析:Perf可以監(jiān)測鎖的使用情況,幫助發(fā)現(xiàn)多線程程序中的競爭問題。

  6. Tracing支持:Perf支持Linux Trace Toolkit Next Generation (LTTng)和eBPF等跟蹤工具,用于深入分析系統(tǒng)的行為。

  7. 報告生成:Perf能夠生成詳細(xì)的報告和統(tǒng)計信息,方便用戶理解和分析性能數(shù)據(jù)。

2、火焰圖分類

(1)CPU

用途:檢測導(dǎo)致CPU運行繁忙的原因。

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

(2)Memory Flame Graphs

用途:檢測應(yīng)用程序內(nèi)存使用量增加的原因。

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

?(3)Off-CPU Flame Graphs

用途:有些性能問題不是CPU的性能問題,即進(jìn)程和線程不在CPU上運行時花費角度的時間,而是在程序請求期間花費了不少時間,這種情況也會成比例的影響性能。

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

?(4)Hot/Cold Flame Graphs

用途:將CPU和非CPU火焰圖結(jié)合在一起。它在一個圖表中顯示了所有線程的運行時間,并允許直接比較在CPU和非CPU上的代碼路徑持續(xù)時間。

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

?(5)Differential

? ? ? ?用途:紅藍(lán)差異火焰圖,分析不同時刻CPU性能變化的原因。

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

?3、火焰圖安裝命令

(1)安裝Perf工具

$ sudo apt-get install linux-tools-$(uname -r) linux-tools-generic -y    //下載Perf
$ perf -v    //查看安裝Perf的版本

(2)下載可視化工具FlameGraph

下載地址:GitHub - brendangregg/FlameGraph: Stack trace visualizer

?4、火焰圖demo測試

測試程序如下:

#include <stdio.h>
#define DEF_PRINT    


void funcA()
{
    for(int i=0; i < 10*10000;i++)
    {
#ifdef DEF_PRINT
       printf("funcA\n");
#endif
    }
}

void funcB()
{
    for(int i=0; i < 20*10000;i++)
    {
#ifdef DEF_PRINT
         printf("funcB\n");
#endif
    }
}

void funcC()
{
    for(int i=0; i < 30*10000;i++)
    {
#ifdef DEF_PRINT
         printf("funcC\n");
#endif
    }
}

void printf1();
void printf2();
void funcD()
{
    for(int i=0; i < 20*10000;i++)
    {
#ifdef DEF_PRINT
         printf("funcD\n");
#endif
    }
    printf1();
}

void printf1()
{
    for(int i=0; i < 10*10000;i++)
    {
#ifdef DEF_PRINT
         printf("printf1\n");
#endif
    }
    printf2();
}

void printf2()
{
    for(int i=0; i < 10*10000;i++)
    {
#ifdef DEF_PRINT
        printf("printf2\n");
#endif
    }
}

int main()
{
    while (true) {
        funcA();
        funcB();
        funcC();
        funcD();
    }
    return 0;
}

?程序編譯命令:

g++ -g -O0 main.cpp -o main //-g帶調(diào)試信息編譯,禁止優(yōu)化O0,

(1)生成CPU火焰圖1

生成火焰圖步驟如下:

程序運行結(jié)果如下:

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

//上面main程序運行時,使用top查看,進(jìn)程PID為5606,CPU為86.3%左右。

$ sudo perf record -F 99 -p 5606 -g -- sleep 30
//-F 99 表示每秒99次采樣, -p 5606 是進(jìn)程號, 即對哪個進(jìn)程進(jìn)行分析, -g 表示記錄調(diào)用棧, sleep 30 則是持續(xù)30秒。

$ sudo perf script -i perf.data &>perf.unfold
//perf script 工具對 perf.data 進(jìn)行解析,生成折疊后的調(diào)用棧。

$ ../FlameGraph/stackcollapse-perf.pl perf.unfold &>perf.folded
//下載的可視化工具FlameGraph在當(dāng)前文件上一層,用 stackcollapse-perf.pl 將 perf 解析出的內(nèi)容 perf.unfold 中的符號進(jìn)行折疊。

$ ../FlameGraph/flamegraph.pl perf.folded >perf1.svg
//生成svg圖

使用瀏覽器打開perf.svg圖,效果如下:

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

(2)火焰圖表解析

?上圖中每個方塊代表堆棧中的一個函數(shù),也叫堆棧幀。

y軸:表示堆棧深度,火焰越高,表示函數(shù)調(diào)用層級越深,最頂部的方塊表示當(dāng)前CPU上運行的函數(shù),每一塊的函數(shù)下方都是當(dāng)前函數(shù)的調(diào)用方。

x軸:表示當(dāng)前函數(shù)的采樣數(shù),與大多數(shù)圖表不同,它不顯示從左到右的時間流逝。左到右的排序沒有意義(它按字母順序排序以最大程度地合并幀),方框的寬度顯示了它在CPU上運行的總時間(基于采樣計數(shù))。哪個方塊的寬度比較大,就表示該函數(shù)可能存在性能問題。

注意:圖標(biāo)中顏色不具有顯著意義,通常是隨機(jī)選擇的暖色調(diào)。這種可視化稱為"火焰圖",因為它最初用于顯示CPU上的熱點,而且看起來像火焰。

它也是交互式的:將鼠標(biāo)懸停在SVG上以顯示詳細(xì)信息,并單擊進(jìn)行縮放。

(3)當(dāng)前程序圖標(biāo)分析

從(1)中火焰圖中看出,沒有demo中定義的函數(shù),這是因為printf函數(shù)占用改進(jìn)程的CPU性能較高,而for循環(huán)邏輯占用性能較低,可以點擊火焰圖上的搜索按鍵Search進(jìn)行搜索,本文搜索程序入口函數(shù)。

確定入口函數(shù)的步驟如下:

a> 入口函數(shù)地址確定

輸入下面命令

$ readelf -h main

可執(zhí)行文件信息如下:?

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

b> 獲取對應(yīng)地址入口函數(shù)

輸入下面命令:

$ readelf -s main

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

?由上圖可知入口函數(shù)為_start,所以搜索_start函數(shù)。

_start搜索結(jié)果如下:

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

點擊__libc_start_main函數(shù),進(jìn)入對于函數(shù)調(diào)用過程,如下:

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

上面火焰圖中printf函數(shù)占用該進(jìn)程CPU性能較高,printf的函數(shù)輸出內(nèi)容到顯示的過程可參考下面鏈接:

printf函數(shù)打?。ㄒ唬?過程解析篇_printf調(diào)用過程_仲夏夜之夢~的博客-CSDN博客

printf函數(shù)打?。ǘ?緩沖區(qū)篇(文件讀寫再探究)_printf flush_仲夏夜之夢~的博客-CSDN博客

?(4)生成火焰圖2

將上面的代碼中的#define DEF_PRINT? 行進(jìn)行屏蔽,這樣函數(shù)就不會打印輸出到屏幕上。重新編譯代碼,運行。

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

?生成火焰圖步驟跟上面(1)中一樣,只是-p參數(shù)的進(jìn)程ID號不同,生成的svg圖片如下:

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

由svg圖表可知,funcA在mainNoPrint進(jìn)程中,占用該進(jìn)程CPU 10%,funcB占用該進(jìn)程CPU 20%,funcC占用該進(jìn)程CPU 30%,funcD占用該進(jìn)程CPU 40%。?

?(5)生成差分火焰圖

運行mainNoPrint函數(shù),抓取系統(tǒng)所有進(jìn)程的CPU,命令如下:

$ sudo perf record -F 99 -a -g -- sleep 30     //a表示對所有進(jìn)程堆棧數(shù)據(jù)進(jìn)行抓取
$ sudo perf script -i perf.data &>perf.unfold
$ ../FlameGraph/stackcollapse-perf.pl perf.unfold &>perf.folded1
$ ../FlameGraph/flamegraph.pl perf.folded1 >perf1.svg

?生成的火焰圖如下:

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

?停止mainNoPrint程序,抓取系統(tǒng)所有進(jìn)程的CPU,命令如下:

$ sudo perf record -F 99 -a -g -- sleep 30
$ sudo perf script -i perf.data &>perf.unfold
$ ../FlameGraph/stackcollapse-perf.pl perf.unfold &>perf.folded2
$ ../FlameGraph/flamegraph.pl perf.folded2 >perf2.svg

生成的火焰圖如下:

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

以perf.folded2的為基準(zhǔn),生成差分火焰圖,命令如下:

$./FlameGraph/difffolded.pl perf.folded2 perf.folded1|../FlameGraph/flamegraph.pl >diff1.svg

?生成的差分火焰圖如下:

perf安裝,程序性能分析及調(diào)試,linux,運維,服務(wù)器

?由紅色部分圖可知,CPU中funcD等函數(shù)占用的CPU增加了,藍(lán)色部分相對于上次CPU減少了。

附加:

1、火焰圖的介紹也可參考:

?Linux下用火焰圖進(jìn)行性能分析_perf火焰圖分析_CHENG Jian的博客-CSDN博客

?2、可視化工具官方可參考:Flame Graphs (brendangregg.com)

?3、其他性能分析工具可參考:C++ performance 性能分析工具(sanitizers valgrind gprof gperftools perf)的使用_performance測試工具_(dá)超級大洋蔥806的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-765682.html

到了這里,關(guān)于linux下性能分析工具Perf安裝與用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Linux各類性能分析工具用法詳解

    Linux各類性能分析工具用法詳解

    在Linux性能分析和優(yōu)化過程中,選用一個好的工具能極大的提高自己的工作效率。這里以Brendan Gregg的Linux性能工具圖譜為線索,梳理了Linux系統(tǒng)下各個模塊的性能分析工具,并對部分常用工具的用法進(jìn)行了詳細(xì)說明。掌握這些工具,可以極大的提高開發(fā)者程序性能優(yōu)化的效果和

    2024年02月11日
    瀏覽(32)
  • 輔助性能優(yōu)化——長安鏈性能分析工具原理及用法

    輔助性能優(yōu)化——長安鏈性能分析工具原理及用法

    如何提升區(qū)塊鏈系統(tǒng)性能是很多開發(fā)者都會關(guān)注的事,但是有些對區(qū)塊鏈并非十分熟悉的開發(fā)者可能會感到?jīng)]有頭緒。長安鏈提供了性能分析工具幫助開發(fā)者梳理系統(tǒng)耗時,優(yōu)化系統(tǒng)性能。下面對長安鏈性能分析工具原理及使用進(jìn)行介紹。 time_counter.sh是長安鏈性能分析工具,

    2024年02月13日
    瀏覽(30)
  • test perf-01-性能測試之 JMeter

    Apache JMeter 可以用于測試靜態(tài)和動態(tài)資源(Web動態(tài)應(yīng)用程序)的性能。 它可以用于模擬服務(wù)器、服務(wù)器組、網(wǎng)絡(luò)或?qū)ο笊系呢?fù)載,以測試其強(qiáng)度或分析不同負(fù)載類型下的總體性能。 JMeter Tutorial Apache JMeter可以用于測試靜態(tài)和動態(tài)資源(Web動態(tài)應(yīng)用程序)的性能。 它可以用于模擬服

    2024年02月03日
    瀏覽(31)
  • Linux超全整理Linux性能分析工具匯總

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

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

    2024年02月07日
    瀏覽(17)
  • 超全整理!Linux性能分析工具匯總合集

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

    高能預(yù)警:文章涵蓋了一個系統(tǒng)的方方面面,如果沒有完善的 計算機(jī)系統(tǒng)知識、網(wǎng)絡(luò)知識 和 操作系統(tǒng)知識 ,文檔中的工具是不可能完全掌握的,另外,對系統(tǒng)性能分析和優(yōu)化是一個長期的過程。 本文主要是結(jié)合Linux 大牛,Netflix 高級性能架構(gòu)師 Brendan Gregg 更新 Linux 性能調(diào)

    2024年02月08日
    瀏覽(19)
  • 性能分析與調(diào)優(yōu): Linux 磁盤I/O 觀測工具

    性能分析與調(diào)優(yōu): Linux 磁盤I/O 觀測工具

    目錄 一、實驗 1.環(huán)境 2.iostat 3.sar 4.pidstat 5.perf 6.?biolatency 7.?biosnoop 8.iotop、biotop 9.blktrace 10.bpftrace 11.smartctl 二、問題 1.如何查看PSI數(shù)據(jù) 2.iotop如何安裝 3.smartctl如何使用 (1)主機(jī) 表1-1 主機(jī) 主機(jī) 架構(gòu) 組件 IP 備注 prometheus 監(jiān)測 系統(tǒng) prometheus、node_exporter ?192.168.204.18 grafana 監(jiān)測

    2024年01月16日
    瀏覽(37)
  • Linux CPU 性能分析工具火焰圖(Flame Graphs)認(rèn)知

    Linux CPU 性能分析工具火焰圖(Flame Graphs)認(rèn)知

    博文內(nèi)容為 《BPF Performance Tools》 讀書筆記整理 詳細(xì)了解小伙伴可以訪問作者官網(wǎng): https://www.brendangregg.com/flamegraphs.html 有油管上分享的作者在 USENIX ATC 2017 的視屏 理解不足小伙伴幫忙指正 不必太糾結(jié)于當(dāng)下,也不必太憂慮未來,當(dāng)你經(jīng)歷過一些事情的時候,眼前的風(fēng)景已經(jīng)

    2024年02月20日
    瀏覽(29)
  • Linux系統(tǒng)運維:性能監(jiān)視和分析工具sar命令詳解

    目? ? ? ? ? 錄 一、sar工具介紹 二、sar工作原理 (一)原理概述 (二)sar數(shù)據(jù)收集器 三、sar命令語法 四、sar主要功能介紹 (一)功能概述 (二)CPU統(tǒng)計數(shù)據(jù) (三)磁盤I/O統(tǒng)計數(shù)據(jù) (四)網(wǎng)絡(luò)統(tǒng)計數(shù)據(jù) 1、是使用-n DEV選項的sar輸出 2、關(guān)于網(wǎng)絡(luò)錯誤的信息可以用sar -n EDE

    2024年02月21日
    瀏覽(28)
  • linux之perf(8)annotate標(biāo)注

    Linux之perf(8)annotate標(biāo)注 Author:Onceday Date:2023年10月12日 漫漫長路,才剛剛開始… 全系列文章請查看專欄 : Perf性能分析_Once_day的博客-CSDN博客。 注:該文檔內(nèi)容采用了GPT4.0生成的回答,部分文本準(zhǔn)確率可能存在問題 。 參考文檔: Tutorial - Perf Wiki (kernel.org) perf-annotate(1) - Linux m

    2024年02月07日
    瀏覽(21)
  • linux之perf(2)list事件

    Linux之perf(2)list事件 Author:Onceday Date:2023年9月3日 漫漫長路,才剛剛開始… 全系列文章請查看專欄 : Perf性能分析_Once_day的博客-CSDN博客。 參考文檔: Tutorial - Perf Wiki (kernel.org) perf-list(1) - Linux manual page (man7.org) 1. 概述 perf list 用于列出可用的性能事件,這些事件可以用于 perf

    2024年02月09日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包