前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动态跟踪分析Nginx-工具介绍篇

动态跟踪分析Nginx-工具介绍篇

作者头像
李俊鹏
发布2020-06-15 16:26:48
1.5K0
发布2020-06-15 16:26:48
举报
文章被收录于专栏:运维研习社运维研习社

之前写过一篇文章Nginx调试必备,介绍了几种调试Nginx的工具,包括echo、lua、njs,这些工具,都只是方便输出或者打印日志输出一些变量等,方便运维人员查看变量输出,或者自定义变量赋值等

在Nginx执行阶段详解中又介绍了通过开启debug的方式编译nginx,在nginx的error.log文件中可以更加详细的看到nginx的内部调用过程

其实在nginx官方文档中,介绍了一种能够更彻底了解nginx内部代码执行、函数调用以及内核调用的方式,那就是利用DTrace

DTrace是一种动态跟踪(Dynamic Tracing)技术,动态跟踪技术是一种在不修改源码或配置,不重启服务,在系统继续运行的前提下,分析、定位问题的方法

动态跟踪相比于其他debug方式,它的优点在于,一般不需要目标应用来配合,通常是随时运行,随时进行采样,随时结束采样,而不用管目标系统的当前状态,另外一个优点就是它自身的性能损耗极小,通常在百分之5,甚至更低,而且它的性能损坏只发生在采样的那段很短的事件,这就为生产环境调试带来极大的方便

而DTrace算是动态跟踪技术的鼻祖,它诞生于Solaris操作系统,是由原来的Sun Micorsystems公司的工程师编写的,更多DTrace的资料,可以通过Brendan的个人博客来了解,虽然优点老了,但是里面可以学习的东西很多,文章最后有地址

说回DTrace跟踪Nginx,在Nginx官方文档中,提供了DTrace脚本文件,可以直接下载,下载后就可以直接运行来动态跟踪Nginx

DTrace在CentOS无法直接安装,源里面没有,需要添加oracle linux的yum源

然后yum 安装oraclelinux-release-el7,安装完成后,关闭上面添加的临时的oracle linux的yum源,接着就可以通过yum安装DTrace

如果遇到gpgcheck检查错误,要么关闭检查,要么从下载校验文件

安装完成后就可以用dtrace了

接着从nginx官网DTrace介绍页面下载已经写好的DTrace脚本,通过dtrace指定nginx进程PID就可以分析了

但是DTrace毕竟是Sun的产物,对于CentOS不太兼容,需要修改内核,添加DTrace的驱动,而且3.8以上内核驱动都已经不维护了,对于生产环境排查故障来说,显然不太适合,所以这里介绍更适合CentOS的工具systemtap

SystemTap也是开源的动态跟踪工具,可以跟踪linux内核态以及用户态,收集详细的信息供开发或运维人员分析及诊断问题

CentOS安装systemtap就很简单了,直接yum安装就可以

systemtap依赖内核扩展包,所以需要安装对应内核版本的扩展包,否则会报错找不到需要的包

安装所需内核扩展包,可以通过stap-prep查看需要的包

接着安装这几个包就可以,安装包也可以通过http://rpm.pbone.net这里找自己内核版本对应的包,或者通过http://debuginfo.centos.org找对应内核的包

安装完成后,可以通过简单的脚本来验证系统是否已经支持systemtap

验证支持后就可以开始使用systemtap动态分析nginx了,不过nginx官网只提供了DTrace的脚本,如果你对systemtap不熟悉,可以找大神写的openresty-systemtap-toolkit工具,里面包含了已经写好的很多Systemtap分析openresty的脚本,对nginx、luaJIT、ngx_lua分析都可以使用,地址见文末

openresty的脚本已经很久不更新了,如果你需要分析新版本的nginx,那么你还是需要学习systemtap用法,或者是用官方提供的DTrace的脚本,转换为SystemTap脚本,SystemTap官网提供了DTrace转换SystemTap脚本的步骤,具体可查看SystemTap官网

Brendan博客:http://dtrace.org/blogs/brendan/

Nginx官方文档:http://nginx.org/en/docs/nginx_dtrace_pid_provider.html#see_also

DTrace 文档:http://dtrace.org/guide/preface.html#preface

systemtap官方文档:https://sourceware.org/systemtap/wiki

openresty-systemtap-toolkit:https://github.com/openresty/openresty-systemtap-toolkit

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档