0X01 准备系统相关包
参考发行版Linux为 Centos relase 6.4(Final) ,系统版本为:2.6.32-358.el6.x86_64。
安装包如下所示,如果有安装冲突,rpm -e 删除原来的rpm包,即可安装
kernel-2.6.32-358.el6.x86_64.rpm
kernel-debug-2.6.32-358.el6.x86_64.rpm
kernel-debug-debuginfo-2.6.32-358.el6.x86_64.rpm
kernel-debug-devel-2.6.32-358.el6.x86_64.rpm
kernel-debuginfo-2.6.32-358.el6.x86_64.rpm
kernel-debuginfo-common-x86_64-2.6.32-358.el6.x86_64.rpm
kernel-devel-2.6.32-358.el6.x86_64.rpm
kernel-headers-2.6.32-358.el6.x86_64.rpm
perf-2.6.32-358.el6.x86_64.rpm
perf-debuginfo-2.6.32-358.el6.x86_64.rpm
python-perf-2.6.32-358.el6.x86_64.rpm
python-perf-debuginfo-2.6.32-358.el6.x86_64.rpm
0X02 安装其它相关包
yum install systemtap //安装systemtap
测试:sudo stap -ve 'probe begin { log("hello Systemtap!") exit() }'
成功之后的截图
接下来安装nginx 相关的包
为了节省时间,直接使用了openresty作为实际的nginx进行测试:nginx version: openresty/1.7.10.1
https://github.com/brendangregg/FlameGraph //把相关的数据转换成火焰图
https://github.com/openresty/nginx-systemtap-toolkit //systemtap使用的相关脚本
0X03 测试
命令sudo ./nginx-systemtap-toolkit/sample-bt -p 14345-u -t 20 > trace.txt
-u 追踪用户态的调用堆栈(也可以使用-k追踪程序运行期间在内核态的堆栈)
-t 脚本的运行时间,达到时间之后脚本自动停止,将堆栈信息输出,单位为秒
WARNING: Tracing 1147 (/home/kawaru/nginx/sbin/nginx) in user-space only...
提示已经开始跟踪,这是可以用ab等等东西打点流量,等20秒之后会显示:
WARNING: Time's up. Quitting now...(it may take a while)
这时候有可能需要多等一会,成功完成后会在trace.txt里看到类似如下图的内容,即是跟踪的数据