Pika CPU火焰图

在压测pika的时候发现首先CPU会达到瓶颈,DDZ上午推荐火焰图,今天简单了解了一下,这里记录一下安装及使用过程

Systemtap 安装

1. yum install yum-utils
2. yum install kernel-devel
3. debuginfo-install kernel
4. yum install systemtap

如果第3步提示失败,则需要自己手动安装,首先拿到机器的内核版本号,以自己为例:

>>> uname -r
3.10.0-229.el7.x86_64

然后在这里找到对应centos及内核版本的包,如7/x86_64下的kernel-debuginfo-common-x86_64-3.10.0-229.el7.x86_64.rpm和kernel-debuginfo-3.10.0-229.el7.x86_64.rpm,然后用rpm -ivh 安装就行了,需要先安装common,安装好之后测试:

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

openresty-systemtap-toolkit

使用systemtap需要自己写脚本,上手稍慢一些,不过openresty-systemtap-toolkit 已经为nginx提供了不少工具脚本,其中sample-bt和sample-bt-off-cpu是通用的可以直接拿来用,如果server的cpu占用率很高可以通过sample-bt来定位占用大户,如果server IO拖住cpu怎么也上不来,可以使用sample-bt-off-cpu来定位

1. 运行pika,拿到PID,开始压测
2. 执行sample-bt -p PID -t 10 -u -a '-vv' > a.bt

-t代表监测10s,-u表示监测用户态,-k表示监测内核态,结束后结果重定向到a.bt中,然后需要用工具来讲结果转换成火焰图

FlameGraph

FlameGraph 是用来生成火焰图的工具,很简单

1. stackcollapse-stap.pl a.bt > a.cbt;
2. flamegraph.pl a.cbt > a.svg

a.svg就是我们需要的火焰图了。如下

总结

简单记录下安装使用