免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6546 | 回复: 12
打印 上一主题 下一主题

OpenSolaris新特性解析之五: dtrace3-dtrace实例分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-31 11:59 |只看该作者 |倒序浏览
该系列前面的文章:



OpenSolaris新特性解析之一:Opensolaris之前身今世    http://bbs.chinaunix.net/viewthread.php?tid=1221539
OpenSolaris新特性解析之二:ZFS                                     http://bbs.chinaunix.net/viewthread.php?tid=1234907
OpenSolaris新特性解析之三:SMF                                     http://bbs.chinaunix.net/viewthread.php?tid=1273723
OpenSolaris新特性解析之四:FMA                                     http://bbs.chinaunix.net/viewthread.php?tid=1295237
OpenSolaris新特性解析之五: dtrace1-基础                    http://bbs.chinaunix.net/viewthread.php?tid=1315928
OpenSolaris新特性解析之五: dtrace2-语法                    http://bbs2.chinaunix.net/viewthread.php?tid=1353868
OpenSolaris新特性解析之五: dtrace3-dtrace工具集     http://bbs.chinaunix.net/viewthread.php?tid=1373277

这部分准备为大家分析两个dtrace实例程序,建议在这部分之前先看看dtrace的前面3个部分。

第一个例子比较简单,我们知道在进程切换的时候是很耗费系统资源和时间的,如果进程的上下文切换次数过多,将耗费比较多的系统资源,降低系统运行的效率。那如何来检测系统的上下文切换次数呢?
我们来看下面的D语言代码:
#!/usr/bin/dtrace -s
sysinfo:::pswitch
{
        @[execname] = count();
}

第一句是千古不变的话#!/usr/bin/dtrace -s,表明这个脚本是dtrace的脚本,需要用dtrace命令来解析脚本来解析,如果这个脚本的名字叫做a.d的话,我们给这个脚本加上可执行的属性chmod +x a.d,然后可以直接在shell里面执行,这个时候shell就根据这句话知道这个脚本需要用dtrace来解析的。

sysinfo:::pswitch这句话表明了我们需要监控的探测点,sysinfo:::pswitch就是这个探测点的名字,sysinfo是这个提供这个探测点的内核提供者的名字,所有的探测点都是由dtrace的内核部分提供的,这就是dtrace可以做你想做的任何事情的原因。sysinfo: : :看到三个冒号之间没有填任何内容,第一个冒号和第二个冒号之间是需要调试的模块的名字,这里没有填写任何内容,表明我们想匹配sysinfo提供的所有模块,第二个冒号和第三个冒号之间也是空的,这里本来需要填写你想调试的函数的名字,我们没有填写,表明我们想匹配sysinfo提供的所有函数,最后一个pswitch是个入口,pswitch这个入口代表了内核中的上下文切换的发生。这个探测点总的意思就是在内核中上下文切换发生的时候,系统你要先帮我执行下面的内容,然后再进行上下文切换,具体执行什么内容呢?就是你用D语言写成的代码,在我们这个例子里面就是   @[execname] = count();

execname是dtrace的内置的变量,含义是可执行程序的名字,比如firefox-bin,这个就是firefox对应的可执行程序的名字,count是dtrace的内置函数,含义就是统计次数,@符号是表明这是个聚合,聚合的概念请看dtrace的前面几篇文章。
我们刚才说这段代码是在上下文切换的时候,在系统的上下文切换代码执行之前执行的,执行的时候就是统计次数,并且根据聚合的概念,这里是根据execname来分类统计,就是根据应用程序来分类统计。我们看到这里,这个程序的含义已经很清楚了,就是统计各个应用程序上下文切换的次数,大家可以执行下,看下结果。怎么执行,请参考dtrace的前面几篇文章。


例子二:
#!/usr/sbin/dtrace -s
pid$1:a.out:main:
{
}
大家再来看看这个例子,pid也是dtrace在内核中的一部分,用于调试进程相关的信息,pid其实就是process id。$1就是你调用这个脚本的时候输入的第一个参数,在这个例子里面我们需要进程的进程号来作为参数。比如这个脚本的名字叫做b.d,那这个脚本的用法就是./b.d 1000,1000是我们想要调试的进程的进程号,这里$1的用法和bash脚本里面的用法是一致的。a.out是模块的名字,也就是1000这个进程对应的那个可执行程序的名字,我们知道在编译的时候,如果不加参数的时候,默认输出的可执行程序的名字就是a.out,main,我们想要调试的函数的名字,这里我们指定了主函数main。然后我们看到四元项里面少了最后一项(四元项请参考dtrace前面的几篇文章),在这里我们没有写最后一项,是想匹配main函数里面的任何位置。

函数体内部什么都没有写,这里dtrace默认将把main函数里面正在执行的语句打印出来。

这里有个问题,我们为什么不写四元项里面的最后一项?

原因在于说,我们在执行这个dtrace脚本的时候,我们不知道a.out这个可执行程序执行到了哪一行,可能当时main正执行到第三行,可能正执行到第五行,所以我们没有写最后一项,希望这个探测点可以从正在执行的任意一行开始匹配。

在dtrace部分的前面的文章中,也有一些例子,如果把这些例子全部都看一遍,执行一遍,我想可以说dtrace已经入门了。

通过这些例子,我们可以看到其实dtrace本身并不复杂,但是要想真正把dtrace用起来,成为自己手中的一个利器,需要对solaris的内核有一定的了解,并且看足够多的dtrace使用实例和用法,如果真的做到这步,那dtrace将成为你手中最好用的一个工具。

对于dtrace这部分,这篇是最后的一篇文章,dtrace部分就结束了。 最后想有兴趣的朋友,推荐本书<solaris性能与工具>,如果大家能够把这本书里面的dtrace实例每一个都学习一遍的话,你将有能力观测到系统中你感兴趣的任何一个方面,书不用多,就这一本经典的就够了。

论坛徽章:
62
洛杉矶湖人
日期:2015-02-10 09:56:11黑曼巴
日期:2016-06-28 17:41:282015-2016NBA季后赛纪念章
日期:2016-06-28 17:41:282016猴年福章徽章
日期:2016-02-18 15:30:34圣安东尼奥马刺
日期:2015-05-04 22:46:00菠菜神灯
日期:2015-05-04 22:35:07新奥尔良黄蜂
日期:2015-03-17 13:54:52明尼苏达森林狼
日期:2015-03-16 21:51:15萨克拉门托国王
日期:2015-03-02 16:10:58华盛顿奇才
日期:2015-03-02 16:10:58迈阿密热火
日期:2015-03-02 16:10:582016科比退役纪念章
日期:2016-06-28 17:41:28
2 [报告]
发表于 2009-03-31 12:00 |只看该作者
赫赫.收藏.

论坛徽章:
0
3 [报告]
发表于 2009-03-31 12:02 |只看该作者
lanlan,你太快了。。。。。

论坛徽章:
62
洛杉矶湖人
日期:2015-02-10 09:56:11黑曼巴
日期:2016-06-28 17:41:282015-2016NBA季后赛纪念章
日期:2016-06-28 17:41:282016猴年福章徽章
日期:2016-02-18 15:30:34圣安东尼奥马刺
日期:2015-05-04 22:46:00菠菜神灯
日期:2015-05-04 22:35:07新奥尔良黄蜂
日期:2015-03-17 13:54:52明尼苏达森林狼
日期:2015-03-16 21:51:15萨克拉门托国王
日期:2015-03-02 16:10:58华盛顿奇才
日期:2015-03-02 16:10:58迈阿密热火
日期:2015-03-02 16:10:582016科比退役纪念章
日期:2016-06-28 17:41:28
4 [报告]
发表于 2009-03-31 13:06 |只看该作者
晕.这个叫法.

碰巧看到.

论坛徽章:
0
5 [报告]
发表于 2009-03-31 13:37 |只看该作者
呵呵

论坛徽章:
0
6 [报告]
发表于 2009-03-31 16:16 |只看该作者
一直关注

论坛徽章:
0
7 [报告]
发表于 2009-04-01 15:16 |只看该作者
唉,感觉越来越没有把这个系列写下去的动力了

论坛徽章:
0
8 [报告]
发表于 2009-04-01 15:24 |只看该作者
原帖由 niupigege 于 2009-4-1 15:16 发表
唉,感觉越来越没有把这个系列写下去的动力了


路遥知马力,哥们,大家都等着呢
冉求曰:非不说子之道,力不足也。子曰:力不足者,中道而废。今女画。

论坛徽章:
0
9 [报告]
发表于 2009-04-01 15:38 |只看该作者
为什么写不下去?说的挺好的呀,这两天都在看 性能和工具 这个书, dtrace代码看得 晕晕的。

论坛徽章:
0
10 [报告]
发表于 2009-04-01 20:26 |只看该作者
我是去年买的这本书的E文版的

打算跟D-Trace丫的死磕了



[ 本帖最后由 Chrome 于 2009-4-1 20:27 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP