Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1102739
  • 博文数量: 286
  • 博客积分: 3124
  • 博客等级: 中校
  • 技术积分: 5186
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-24 23:42
个人简介

Bomi

文章存档

2015年(1)

2013年(1)

2012年(281)

2008年(3)

分类: 系统运维

2012-02-04 00:31:34

本文假设你对基本的Dtrace技术已经熟悉了,例如探针(Probes)、谓词(Predicate)、操作(Action)等概念已经比较熟悉了。



我们在这篇文章中将介绍一些关于Dtrace使用的技巧、提示和窍门。本文依照的是Byan Cantrill,Mike Shapire和Adam Leventhal所写的”Advacned Dtrace-Tips,Tricks and Gotchas”里面介绍的提示、技巧和窍门并不遵照某一顺序。



Dtrace提示(Tips)

提示是用来指出哪些在大部分在文档中已经写出的,但是并不被人们知道和重视的一些使用技术。本文将列举一些其中的使用技术,但是如果想更详细的了解全部内容,请参照Dtrace文档,如《Dtrace动态跟踪指南》。



Dtrace技巧(Tricks)

有一些Dtrace的技术不是显见的,并且文档中也很少涉及。有一些技巧是用来对付Dtrace现有的一些限制和不足的,这些Dtrace的限制有的正在被改进,这样一些技巧在以后的新的版本的Dtrace出现之时就会用不上了。



Dtrace窍门(Gotahcs)

和任何一个系统一样,Dtrace也有一些容易让新手掉进去的陷阱,还有一些会让Dtrace专家掉进去。Dtrace的设计者尽量减少这样的陷阱,但是这样的陷阱还是一个很流行的问题。有一些陷阱在文档中已经提出,但是并没有把他们归在一个地方。



好我们开始今天的探索之旅吧!





Tip: 正规化聚会结果 Normalizing aggregation

    * 在很多情况下,我们更希望得到的是不是一个决定的数值,而是一个单位量内发生的率,例如每秒的系统调用次数,每一个事务(Transaction)发生I/O操作的次数。
    * 在Dtrace中,聚会结果可通过正规化来转化成一个单位量内发生的率。
    * 其格式为”normalize(@agg,n)” ,其中agg是聚会变量,n是任意一个Dtrace表达式



Tip:clear和tick探针

    * clear探针可以将聚合变量清零
    * 使用tick探针定期将聚合变量清零,这样就可以侦测在周期时间内的各个系统参数

    io:::start

    {

            @[execname] = count();

    }

    tick-1sec

    {

            printa(“%40s %@d\n”, @);

            clear(@);

    }



Tip: 使用stop终止进程

    * 在某些情况下,用户希望停止一个进程,使用传统的一些debugger(如:DBX,MDB)来进行后续的调试
    * 可以使用stop可以完成上述任务

    #pragma D option destructive

    io:::start

    /execname == “java”/

    {

        printf(“stopping %d...”, pid);

        stop();

    }



Trick: 有条件的断点(Conditional Breakpoints)

    * 现有的条件断点机制仅仅限于非常简单的条件
    * 使用stop操作和pid提供者可以制作更多更丰富的条件断点
    * 例如:基于如下的断点:

    -  返回值(Return Value)

    -  函数参数值(Argument Value)

    -  延迟值(Latency)



Gotcha: 程序运行到极限了

    * 如果你尝试启动巨大的D 脚本,例如启动很多探针或很多操作,你会发现Dtrace拒绝执行脚本:

    dtrace: failed to enable './biggie.d': DIF

    program exceeds maximum program size

    * 这时你可以改变一些参数来让你的脚步执行,在/etc/system 改变dtrace_dot_maxsize或通过”mdb -kw”命令,默认的大小是256k
阅读(659) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~