systemtap怎么调试脚本程序
发布网友
发布时间:2022-05-01 16:07
我来回答
共1个回答
热心网友
时间:2022-04-11 23:46
其实下面要说的没多少硬货,算是个自己这些日子使用春哥写的那几个systemtap脚本调优的经验总结吧。
一、systemtap安装
因为一直在ubuntu上使用,所以安装很简单 sudo apt-get install systemtap,源码安装的话请参考这篇文章:http://www.cnblogs.com/hazir/p/systemtap_introction.html 中的方法一。
二、内核调试信息
不用跟踪内核态性能大概也不需要,不过保不齐会用到所以我也把内核调试信息搞上了。对于ubuntu这种发行版内核来说好处是官方已经提供了(URL:http://ddebs.ubuntu.com/pool/main/l/linux/),根据自己的内核(uname -a 查询)挑选版本。 如我的是Linux ubuntu 3.13.0-32-generic 那么对应的就是:linux-image-3.13.0-32-generic-dbgsym_3.13.0-32.57_amd64.ddeb。
下载后用 dpkg -i linux-image-3.13.0-32-generic-dbgsym_3.13.0-32.57_amd64.ddeb 安装。
三、Hello Systemtap!
上面这些完成以后可以使用命令:sudo stap -ve 'probe begin { log("hello Systemtap!") exit() }' 来测试是否安装成功。如果成功的话会有类似下面的输出:
春哥的nginx <wbr>systemtap调试脚本简单介绍
四、nginx-systemtap-toolkit
进入正题,这个就是主要介绍的章亦春大神写的systemtap nginx调试的系列脚本了(URL:Github地址),提供了活动请求的查询、ngx_lua模块的当前lua堆栈查看、pcre模式串/运行时间分析、C堆栈采样等等炸裂功能。
首先介绍下C堆栈采样这个脚本,结合Brendan Gregg大神写的FlameGraph tools(URL:https://github.com/brendangregg/FlameGraph),可以画出功能实用、看着酷炫的火焰图。如图:春哥的nginx <wbr>systemtap调试脚本简单介绍
这个东西的原理就是在程序运行的时候每隔一定的时间对指定进程的C堆栈进行采样,将当前各栈帧的函数名保存起来。因为采样时间是恒定的,所以最后的结果上如果一个函数占用cpu时间越长,那么得到的采样次数也就越多,最后反映到火焰图上的横轴长度就越长。另外颜色深浅其实没什么含义,只是方便查看。
使用方法:
1、首先确定编译的代码要带有调试i信息,以便调试脚本可以获得具体的代码信息。如nginx就要加上--with-debug开关。
2、其次要调优的进程已经启动,并且获得其pid,对于nginx这种多进程的程序,需要找到一个worker进程的pid,所以如果是开发环境调优的话,可以考虑使用单进程跑nginx。
3、命令sudo ./nginx-systemtap-toolkit/sample-bt -p 1147 -u -t 20 > trace.txt
其中-p 指定进程的pid
-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)
systemtap运行SystemTap
2. 直接从标准输入读取并运行脚本,指令为:stap [选项] - 3. 在命令行中运行预先定义的脚本,命令格式为:stap [选项] -e 脚本 4. 对于已经设置为可执行的脚本文件(通常第一行包含#!/usr/bin/stap),可以直接运行,如:./脚本文件名。若需中止,使用"Ctrl+C"。SystemTap的选项功能丰富,随...
android auto
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇到的疑难杂...
SystemTap工具的使用基础
上例中看到找到了syscall.Mount函数,并且把它的所有参数和参数类型都打印了出来。 后面可以在stap脚本中,这个函数的上下文里直接使用这些参数,例如通过$source可以访问到参数source systemtap支持print()和printf()函数,其中printf使用语法和c语言一致。支持%s,%d,%x格式 在systemtap里凡是以$开头的...
stapsd是什么意思?
首先,下载并安装SystemTap,并将要运行的脚本传输到要监控的系统中。接下来,启动stapsd守护进程,这样可以避免频繁启动检测器程序的时间开销。最后,通过运行SystemTap脚本,获取所需的性能调试信息。需要注意的是,为了保证数据的准确性,应该根据需要对采样频率和采样时间进行合理的配置。
systemtap简介
SystemTap与DTrace技术相似,后者源于Sun Solaris中的D编程语言。DTrace使用探针和操作脚本来跟踪行为,例如,一个简单的脚本可能计算每个进程发出的系统调用次数,如清单1所示。DTrace在Solaris中占据重要地位,其开源特性使得它被移植到了FreeBSD系统中。另一个内核追踪工具是ProbeVue,由IBM为AIX操作系统开...
掌握Linux内核25种不可或缺的调试工具linux内核调试工具
1.SystemTap:SystemTap是一种探查故障和优化Linux内核性能的调试器,使用它可以方便地构建内核统计数据。它可以运行通用和复杂的内核脚本,用于监测内核在指定时间段的行为和性能。2.perf:Perf是linux内核性能分析器,可用于跟踪内核中的程序性能,如运行时间、系统调用、虚拟内存和内核锁定等。它可以随时间...
性能优化工具
使用 SystemTap 绘制火焰图主要包括以下步骤:首先使用 perf 采集系统事件,通常会默认采集 CPU 周期并记录调用栈。采集完成后,数据需要通过 SystemTap 的解析工具进行整理。使用 stackcollapse-perf.pl 脚本将解析出的符号进行折叠,简化火焰图的显示。最后,将整理后的信息用火焰图工具绘制成直观的图形。在...
软件调试方法(常用的软件调试技术)
通用工具,比如Unix命令行工具、跟踪(考虑下strace、dtrace和systemtap)工具和版本控制系统。InfoQ:程序员做什么能够提高调试效率?Spinellis:首先要为调试成功做好准备。让自己相信问题将会得到解决,留出足够的时间用于调试,不要分心,要坚持不懈,必要的时候,留待第二天解决。重要的是,要不断地在环境...
如何选择一个 Linux Tracer
最近,我发布了一些工具systemtap-lwtools来演示如何在没有内核诊断信息的情况下使用SystemTap。LTTng:我只花了一点时间,还不足以发表任何内容。ktap:我的网页ktap实例包含一些早期版本的单行小程序和脚本。dtrace4linux:我在系统性能一书中给出了一些实例,并曾经开发了一些小的修复程序,如timestamps。OL DTrace:...
程序员精进之路:性能调优利器--火焰图
使用systemtap生成火焰图,需要安装相关依赖,编写脚本并将其编译为内核模块,然后通过staprun命令运行。通过实际案例,如Apache APISIX的性能瓶颈和nginx的互斥锁问题,火焰图展示了如何在实际问题中运用。最后,作者提醒,虽然动态追踪工具如perf和systemtap对后台服务影响较小,但在不同内核版本或进程变化时,...
大型网站数据库系统,怎么连接那么多并发数量的?
按我个人经验有以下几种方法:1.在连接数据库的时候可以优化,使用连接池。主要就是不要频繁地创建,销毁连接。这是很费时的一个操作。因此,使用连接池来代替普通的建立连接操作,能提高并发度。2. 使用缓存技术。并不是每次都需要去数据库里面查询的,我们其实可以把前一次的查询结果放在内存里,如果...