如何安装火焰图生成工具
在 CentOS 上的安装方法
这些 rpm 包可以在该网址中下载: http://debuginfo.centos.org
$ yum install systemtap
# ...(省略中间过程)
# 测试 systemtap 安装成功与否:
$ 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 的这篇文档:
$ sudo apt install elfutils
$ sudo apt-get build-dep systemtap
# 下载最新的版本
# 构建,并祈祷能一次成功
$ ./configure
$ sudo make install
火焰图绘制
首先,需要下载 stapxx 工具包:。
结果如下:
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
hippo 15010 14857 0 Jul01 ? 00:00:12 nginx: worker process
其次,下载 Flame-Graphic 生成包:Github 地址。
该工具包中包含多个火焰图生成工具,其中,stackcollapse-stap.pl
才是为 SystemTap 抓取的栈信息的生成工具。
$ flamegraph.pl flame.cbt > flame.svg
如果一切正常,那么会生成 flame.svg,这便是火焰图,用浏览器打开即可。
PS:如果在执行 的时间周期内(上面的命令是 5 秒), 抓取的 worker 没有任何业务在跑,那么生成的火焰图便没有业务内容。为了让生成的火焰图更有代表性,我们通常都会在抓取的同时进行压测。