systemtap和火焰圖(flamegraph)介紹
System介紹:
主要用於診斷效能問題
火焰圖介紹:
火焰圖將systemtap蒐集到的資料以直觀的方式顯示出來
下面介紹systemtap的安裝和使用
一:systemtap在centos 6的安裝,由於修改了核心,所以中間需要重啟系統
摘抄其中的關鍵點:
cd /etc/yum.repos.d/
vi CentOs-Debuginfo.repo,修改enabled=1
yum --disablerepo="*"--enablerepo="centosplus" install kernel.x86_64
yum install kernel-debuginfo.x86_64
reboot
yum --disablerepo="*"--enablerepo="centosplus" install kernel-devel.x86_64
最後執行stap-v -e 'probe vfs.read {printf("read performed\n"); exit()}'
看到Success就成功了,否則會報錯
二:如何使用systemtap收集資料
1:抄的大神指令碼,建立指令碼,檔名以.stp結尾,比如ngx.stp, 我在附件中也放了一份,內容如下:
global s;
global quit = 0;
probe timer.profile {
if (pid() == target()) {
if (quit) {
foreach ([u] in s) {
print_ustack(u);
printf("\t%d\n", @count(s[u]));
}
exit();
} else {
s[ubacktrace()] <<< 1;
}
}
}
probe timer.s(100) {
quit = 1
}
上面的probetimer.s(100)是收集時間,可以根據需要修改
2:按以下方式執行:
stap --ldd -d /to/be/run --all-modules -DMAXMAPENTRIES=10240 -D MAXACTION=2000000 -D MAXSKIPPED=10000000 -D MAXTRACE=100-D MAXSTRINGLEN=4096 -DSTP_NO_OVERLOAD -D MAXBACKTRACE=100 -x 12641 ngx.stp--vp 0001 > ngx.out
其中-d後面是要捕捉的執行檔案絕對路徑,-x後面是可執行檔案當前執行例項的程序id
三、使用火焰圖轉換工具
1:下載火焰圖轉換指令碼檔案
2:按以下命令轉換捕捉結果到svg檔案
perl stackcollapse-stap.pl ngx.out >ngx.out2
perl flamegraph.pl ngx.out2 > ngx.svg
3:最後將svg檔案以瀏覽器方式開啟就可以了
其他