如何安装火焰图生成工具

    在 CentOS 上的安装方法

    这些 rpm 包可以在该网址中下载: http://debuginfo.centos.org

    1. $ yum install systemtap
    2. # ...(省略中间过程)
    3. # 测试 systemtap 安装成功与否:
    4. $ stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'

    结果如下:

    如果出现如上输出表示安装成功。

    在 Ubuntu 上的安装方法

    一般来说,仅需引入 ddeb 源,然后 apt-get 就能解决了。

    由于 systemtap 需要依赖某些内核特性,对于 Ubuntu Gutsy (或更老的版本),必须重新编译内核。 编译的步骤参见 systemtap 的这篇 wiki: https://sourceware.org/systemtap/wiki/SystemtapOnUbuntu

    另外,由于 Ubuntu 16.04 官方库里的 systemtap 版本过旧(version 2.9),从 apt-get 安装的 systemtap 有些情况下并不能正确地运行。 这时候需要从 systemtap 源码中编译出可用的 systemtap。 编译的过程参考 systemtap 的这篇文档:

    1. $ sudo apt install elfutils
    2. $ sudo apt-get build-dep systemtap
    3. # 下载最新的版本
    4. # 构建,并祈祷能一次成功
    5. $ ./configure
    6. $ sudo make install

    火焰图绘制

    首先,需要下载 stapxx 工具包:。

    结果如下:

    1. hippo 14857 1 0 Jul01 ? 00:00:00 nginx: master process /opt/openresty/nginx/sbin/nginx -p /home/hippo/skylar_server_code/nginx/main_server/ -c conf/nginx.conf
    2. hippo 15010 14857 0 Jul01 ? 00:00:12 nginx: worker process

    其次,下载 Flame-Graphic 生成包Github 地址

    该工具包中包含多个火焰图生成工具,其中,stackcollapse-stap.pl 才是为 SystemTap 抓取的栈信息的生成工具。

    1. $ flamegraph.pl flame.cbt > flame.svg

    如果一切正常,那么会生成 flame.svg,这便是火焰图,用浏览器打开即可。

    PS:如果在执行 的时间周期内(上面的命令是 5 秒), 抓取的 worker 没有任何业务在跑,那么生成的火焰图便没有业务内容。为了让生成的火焰图更有代表性,我们通常都会在抓取的同时进行压测。