1. 程式人生 > >systemtap和火焰圖(flamegraph)介紹

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檔案以瀏覽器方式開啟就可以了

其他