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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

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

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在CentOS 6.6 x86_64上安装SystemTap/Perf+FlameGraph玩转火焰图实录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
下面是我結合網上資料摸索出的可行的操作方法,記錄在這樣,以備后面繼續研究。操作系統是CentOS 6.6 x86_64。
1.將內核版本升級到最新版
因為我機器上CentOS 6.6的內核版本號是2.6.32-573.12.1.el6.x86_64,網上根本找不到對應的kernel-devel,kernel-debuginfo和kernel-debuginfo-common內核rpm包,而升級到最新版就可以解決這個問題。
升級方法參見
http://blog.csdn.net/tao_627/article/details/52136091

升級后的版本號是2.6.32-642.3.1.el6.x86_64


2.檢查內核是否提供utrace/uprobes用戶態支持
打開/boot/config-2.6.32-642.3.1.el6.x86_64文件(內核版本不同,文件名不同),檢查CONFIG_UTRACE宏是否設置。如果沒有,就不能使用SystemTap
cat /boot/config-2.6.32-642.3.1.el6.x86_64 | grep '_UTRACE'
2.安裝內核調試所需要的包
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
驗證SystemTap是否安裝成功?

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


我目前安裝的版本號是


配置的腳本flame.stp內容如下

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.監視運行中的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版本的,各重要參數說明一下:
-d 表示要查看的對象,比如這里必須要填traffic_server
--ldd 表示加載所有需要的動態庫名
--all-modules ?加載內核所有需要用到所有動態庫名
-D NM=VAL ?emit macro definition into generated C code
注意這些宏參數根據各自環境自行配置和摸索得到合適的值,可以進一步參考SystemTap的官方資料和文檔,我這里暫沒有好的結果。
各種資源的使用限制由所生成的C代碼中的宏來設置。這些值可在編譯時由-D選項來重寫。下面描述了部分挑選出來的宏:
MAXNESTING 遞歸函數的最大調用層數,默認值是10。
MAXSTRINGLEN 字符串的最大長度,默認值是128。
MAXTRYLOCK 在聲稱可以出現死鎖和跳出探測點前,等待全局變量鎖的最大迭代次數,默認值是1000。
MAXACTION 單個探測點內可以執行語句數的最大值,默認值是1000。
MAXMAPENTRIES 數組在聲明時沒有顯示指定大小時,數組的最大行數(譯者注:即組數的最大下標個數),默認值為2048。
MAXERRORS ?在觸發退出前,可以容忍軟件錯誤個數的最大值,默認值是0。
MAXSKIPPED 在觸發退出前,可忽略的重入探測點的最大值,默認值是100。
MINSTACKSPACE 運行探測處理函數所需要的內核棧的最小字節數。此數值應比探測處理函數所需內核棧的大小加上安全邊界大小足夠大。默認值是1024。
參考nginx的項目nginx-systemtap-toolkit中sample-bt這個perl腳本的內容來完善我們的測試。


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


6.perf+FlameGraph生成的火焰圖

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


局部圖


參考文獻
[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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。