日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

在CentOS 6.6 x86_64上安装SystemTap/Perf+FlameGraph玩转火焰图实录

發(fā)布時(shí)間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在CentOS 6.6 x86_64上安装SystemTap/Perf+FlameGraph玩转火焰图实录 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
下面是我結(jié)合網(wǎng)上資料摸索出的可行的操作方法,記錄在這樣,以備后面繼續(xù)研究。操作系統(tǒng)是CentOS 6.6 x86_64。
1.將內(nèi)核版本升級(jí)到最新版
因?yàn)槲覚C(jī)器上CentOS 6.6的內(nèi)核版本號(hào)是2.6.32-573.12.1.el6.x86_64,網(wǎng)上根本找不到對(duì)應(yīng)的kernel-devel,kernel-debuginfo和kernel-debuginfo-common內(nèi)核rpm包,而升級(jí)到最新版就可以解決這個(gè)問題。
升級(jí)方法參見
http://blog.csdn.net/tao_627/article/details/52136091

升級(jí)后的版本號(hào)是2.6.32-642.3.1.el6.x86_64


2.檢查內(nèi)核是否提供utrace/uprobes用戶態(tài)支持
打開/boot/config-2.6.32-642.3.1.el6.x86_64文件(內(nèi)核版本不同,文件名不同),檢查CONFIG_UTRACE宏是否設(shè)置。如果沒有,就不能使用SystemTap
cat /boot/config-2.6.32-642.3.1.el6.x86_64 | grep '_UTRACE'
2.安裝內(nèi)核調(diào)試所需要的包
yum -y install kernel-devel-2.6.32-642.3.1.el6.x86_64
yum -y install kernel-debuginfo-2.6.32-642.3.1.el6.x86_64
yum -y install kernel-debuginfo-common-x86_64-2.6.32-642.3.1.el6.x86_64
3.安裝SystemTap并配置腳本
yum -y install systemtap
驗(yàn)證SystemTap是否安裝成功?

stap -ve 'probe begin{log("hello SystemTap!")exit()}'


我目前安裝的版本號(hào)是


配置的腳本flame.stp內(nèi)容如下

global s; 
global quit = 0; 
probe timer.profile { if (pid() == target()) { if (quit) { foreach ([sys,usr] in s- limit 1000) { print_stack(sys)print_ustack(usr); printf("\t%d\n", @count(s[sys, usr])); } exit() } else { s[backtrace(), ubacktrace()] <<< 1; } } 
} 
probe timer.s(20) { quit = 1 
} 

4.監(jiān)視運(yùn)行中的ats并采樣,輸出svg圖
stap --ldd -d /usr/bin/traffic_server --all-modules -D MAXMAPENTRIES=256 -D MAXACTION=20000 -D MAXTRACE=100 -D MAXSTRINGLEN=4096 -D MAXBACKTRACE=100 -x $(pidof traffic_server) flame.stp --vp 0001 > ats.out
這里ats必須是debug版本的,各重要參數(shù)說明一下:
-d 表示要查看的對(duì)象,比如這里必須要填traffic_server
--ldd 表示加載所有需要的動(dòng)態(tài)庫名
--all-modules ?加載內(nèi)核所有需要用到所有動(dòng)態(tài)庫名
-D NM=VAL ?emit macro definition into generated C code
注意這些宏參數(shù)根據(jù)各自環(huán)境自行配置和摸索得到合適的值,可以進(jìn)一步參考SystemTap的官方資料和文檔,我這里暫沒有好的結(jié)果。
各種資源的使用限制由所生成的C代碼中的宏來設(shè)置。這些值可在編譯時(shí)由-D選項(xiàng)來重寫。下面描述了部分挑選出來的宏:
MAXNESTING 遞歸函數(shù)的最大調(diào)用層數(shù),默認(rèn)值是10。
MAXSTRINGLEN 字符串的最大長度,默認(rèn)值是128。
MAXTRYLOCK 在聲稱可以出現(xiàn)死鎖和跳出探測點(diǎn)前,等待全局變量鎖的最大迭代次數(shù),默認(rèn)值是1000。
MAXACTION 單個(gè)探測點(diǎn)內(nèi)可以執(zhí)行語句數(shù)的最大值,默認(rèn)值是1000。
MAXMAPENTRIES 數(shù)組在聲明時(shí)沒有顯示指定大小時(shí),數(shù)組的最大行數(shù)(譯者注:即組數(shù)的最大下標(biāo)個(gè)數(shù)),默認(rèn)值為2048。
MAXERRORS ?在觸發(fā)退出前,可以容忍軟件錯(cuò)誤個(gè)數(shù)的最大值,默認(rèn)值是0。
MAXSKIPPED 在觸發(fā)退出前,可忽略的重入探測點(diǎn)的最大值,默認(rèn)值是100。
MINSTACKSPACE 運(yùn)行探測處理函數(shù)所需要的內(nèi)核棧的最小字節(jié)數(shù)。此數(shù)值應(yīng)比探測處理函數(shù)所需內(nèi)核棧的大小加上安全邊界大小足夠大。默認(rèn)值是1024。
參考nginx的項(xiàng)目nginx-systemtap-toolkit中sample-bt這個(gè)perl腳本的內(nèi)容來完善我們的測試。


5.下載FlameGraph包,并轉(zhuǎn)換輸出數(shù)據(jù)為svg圖
git clone https://github.com/brendangregg/FlameGraph.git
將需要用到的flamegraph.pl和stackcollapse-perf.pl到當(dāng)前目錄,并執(zhí)行
perl stackcollapse-stap.pl ats.out > ats.out2
perl flamegraph.pl ats.out2 > ats.svg
使用瀏覽器打開該svg文件就可以了。


6.perf+FlameGraph生成的火焰圖

另外使用perf record也可以采集指定時(shí)間的數(shù)據(jù),并使用FlameGraph生成活躍圖。下面是火焰圖示例


局部圖


參考文獻(xiàn)
[1].https://sourceware.org/systemtap/ftp/releases/
[2].https://github.com/brendangregg/FlameGraph
[3].https://github.com/openresty/nginx-systemtap-toolkit
[4].https://github.com/openresty/stapxx

總結(jié)

以上是生活随笔為你收集整理的在CentOS 6.6 x86_64上安装SystemTap/Perf+FlameGraph玩转火焰图实录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。