日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在項目開發中,經常會遇到程序啟動時間過長、CPU使用率過高等問題,這個時候需要依靠性能分析工具來定位性能的消耗點。本文介紹三個常用的工具的入門級使用及圖形化方法,供大家參考。

本文介紹perf、gprof和valgrind三個性能分析工具,及其分析結果圖形化的方法,旨在讓大家更快的上手使用工具。出于篇幅的限制,本文不會對每種工具的使用參數及結果分析做詳細的介紹,只做入門級的使用說明。

每個工具的介紹會分成簡介、使用說明、圖形化方法三個部分。

每種工具的結果都會基于下面這段代碼:

#include <unistd.h>
using namespace std;
#define NUM 500000
void init(int* int_array){
	for(int i=0;i<NUM;i++){
		int_array[i]=i;
	}
}

void accu(int* int_array,long& sum ){
	for(int i=0;i<NUM;i++){
		sum+=int_array[i];
		usleep(3);
	}	
}

int main(){
	int int_array[NUM];
	init(int_array);
	long sum=0;
	accu(int_array,sum);
}

這段代碼在V615機器上執行了31s,最大CPU使用率為8.3%(top結果)

一、Perf

1.1 簡介

Perf是內置于linux內核源碼樹中的性能剖析(profiling)工具。其基于事件采樣原理,以性能事件為基礎,常用于性能瓶頸的查找與熱點代碼的定位。

1.2 使用

perf的使用可以分為兩種方式:

  • 直接使用perf啟動服務
  • 掛接到已啟動的進程

第一種方式不需要root權限,第二種方式需要root權限

基于入門級使用這一前提,直接介紹一下使用方式:

perf record -e cpu-clock -g  ./run
或者
perf record -e cpu-clock -g  -p 4522

使用ctrl+c中斷perf進程,或者在程序執行結束后,會產生perf.data的文件,使用

perf report

會產生結果分析,如圖

Linux性能分析工具與圖形化方法

 

1.3 圖形化方法

perf的結果可以生成火焰圖。生成火焰圖需要借助Flame Graph

clone代碼或者直接下載壓縮包到服務器上。以壓縮包為例,是一個命名為:FlameGraph-master.zip的文件,假設其解壓后的目錄為:/data

基于1.2產生的perf.data,后續步驟如下:

1、使用perf script工具對perf.data進行解析
perf script -i perf.data &> perf.unfold

2、將perf.unfold中的符號進行折疊:
/data/stackcollapse-perf.pl perf.unfold &> perf.folded

3、最后生成svg圖:
/data/flamegraph.pl perf.folded > perf.svg

生成的火焰圖如下:

Linux性能分析工具與圖形化方法

 

關于火焰圖的含義及分析網上有很多文章,這里不再贅述

需要C/C++ Linux服務器架構師學習資料私信“資料”(資料包括C/C++,Linux,golang技術,Nginx,ZeroMQ,MySQL,redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協程,DPDK,ffmpeg等),免費分享

Linux性能分析工具與圖形化方法

 

二、Gprof

2.1 簡介

gprof用于監控程序中每個方法的執行時間和被調用次數,方便找出程序中最耗時的函數。在程序正常退出后,會生成gmon.out文件,解析這個文件,可以生成一個可視化的報告

2.2 使用方法

使用gprof,需要在編譯時,加入-pg選項

另外只有在程序正常退出后才會生成gmon.out,kill進程的方法是沒法生成gmon.out的。對于那些線程會一直run的服務,需要修改代碼,讓程序在某個時間點停止。

重新編譯后,正常啟動程序即可;然后在程序運行結束后,會生成gmon.out文件

使用如下命令,生成報名文件(其中run是二進制的名字):

gprof -b run gmon.out >>report.txt

report.txt打開如下圖所示:

Linux性能分析工具與圖形化方法

 

2.3 圖形化方法

gprof的結果文件需要借助gprof2dot.py和graphviz來展示

使用gprof2dot.py生成dot文件

Python gprof2dot.py  report.txt  >report.dot 

需要說明的是,這里要求服務器已經安裝了python,并且要求gprof2dot.py與安裝的python版本匹配。這兩者是否匹配是一個需要運氣、并且解決起來很無聊的事情,我的服務器上安裝的python是2.6.6,第一次從網上下載的gprof2dot-2017.9.19與python版本就不匹配,執行會出錯。目前使用的版本與2.6.6是兼容的,如果需要可以與我聯系。

dot的打開需要graphviz工具,我是在windows下安裝的graphviz,這個工具下載很簡單。下載后使用gvedit.ext打開前一個步驟產生的report.dot文件即可

Linux性能分析工具與圖形化方法

 

這個圖顯的有些萌萌噠,這是因為我們的程序寫的比較簡單,對于一般的業務而言,這個圖會比較復雜。

三、Valgrind

3.1 簡介

valgrind不是linux的原生工具,需要自行安裝。valgrind自身包含了多個工具:

  • Memcheck:用于內存泄漏檢查
  • Callgrind:用于性能分析,會收集程序運行時間和調用關系
  • 以及Cachegrind、Helgrind等

這里我們主要使用的Callgrind工具

3.2 使用方法

首先需要安裝valgrind:http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2

解壓安裝包后,順次執行:./configue 、make、make install 就可以了

使用valgrind來分析性能,必須使用valgrind來啟動程序:

valgrind --tool=callgrind --separate-threads=yes ./run

--separate-threads是指是否按線程來分別統計,如果不加,會將所有線程的結果打到一個文件里;否則會按線程分別打印到不同文件里。

程序執行結束后,會生成形如:callgrind.out.4263-01的文件。這個文件直接分析起來有些困難,必須借助圖形化的方式來瀏覽

3.3 圖形化方法

valgrind的圖形化需要借助kcachegrind.exe,大家可以自行下載,下載后在windows運行即可。這是打開callgrind.out.4263-01的結果:

Linux性能分析工具與圖形化方法

 

四、工具比較

對于我們的需求:定位執行時間最長、占用CPU最多的函數 來說,這三個工具都可以達到目的。但這三者之間還是有一定的差距:

4.1 啟動方式

perf雖然可以掛接進程但需要root權限。在普通權限下,perf和valgrind必須使用前綴啟動的方式來啟動程序,這在某種程度上會影響到程序的性能。我們在壓測的過程中發現使用valgrind啟動的時候,可以支持的在線總人數比直接運行程序要少很多。

4.2 程序侵入

perf和valgrind都不需要修改Makefile或者程序,但gprof需要重新編譯文件,并且對于線程一直run的服務,還需要修改代碼讓其自然退出,這在一定程序上侵入了程序。但從對性能影響上來看,gprof可以最大限制的保留原程序的性能

4.3 結果展示

gprof的結果是一顆倒樹,這顆樹展示了從根到葉子的所有結點的時間消耗;perf的是一個金字塔,與gprof有異曲同工之妙;valgrind的結果是一條單路,指出的是某條調用路徑上的時間消耗,并不是一個全局的展示。

4.4 監控原理

這是一個很專業的話題,目前對三者的監控原理還沒有摸的太透,所以這里暫時空著。大家有興趣可以先行研究。

分享到:
標簽:性能 分析 Linux
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定