Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1299850
  • 博文数量: 554
  • 博客积分: 10425
  • 博客等级: 上将
  • 技术积分: 7555
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 09:49
文章分类

全部博文(554)

文章存档

2012年(1)

2011年(1)

2009年(8)

2008年(544)

分类:

2008-04-15 11:44:03


启用简单DTrace 探测器
9 • DTrace入门67
启用简单DTrace 探测器
打开终端窗口。
启用探测器:
# dtrace -n BEGIN
在简短暂停后,dtrace 将会通知您已启用一个探测器,并且会显示一行输
出,指出BEGIN 探测器已被触发。显示此输出后,dtrace 将保持暂停状
态,以等待其他探测器触发。由于尚未启用任何其他探测器,并且BEGIN
仅触发一次,因此可在shell 中按Ctrl-C,退出dtrace 并返回到shell 提示
符:
通过按Ctrl-C 返回到shell 提示符:
# dtrace -n BEGIN
dtrace: description ’BEGIN’ matched 1 probe
CPU ID FUNCTION:NAME
0 1 :BEGIN
^C
#
该输出表明,名为BEGIN 的探测器已被触发一次,并且已列出其名称和
整数ID 1。请注意,缺省情况下会显示触发此探测器的CPU 的整数名
称。在此示例中,CPU 列指示触发该探测器时,正在CPU 0 上执行
dtrace 命令。
您可以使用任意数量的探测器和操作来构造DTrace 请求。通过在上一示
例命令中添加END 探测器,我们来使用两个探测器创建一个简单的请
求。END 探测器在完成跟踪时触发一次。
添加END 探测器:
# dtrace -n BEGIN -n END
dtrace: description ’BEGIN’ matched 1 probe
dtrace: description ’END’ matched 1 probe
CPU ID FUNCTION:NAME 0 1 :BEGIN
^C
0 2 :END
#
END 探测器在完成跟踪时触发一次。如您所见,按Ctrl-C 退出DTrace 时
将触发END 探测器。DTrace 会在退出之前报告此探测器的触发情况。
1
2
3
4
启用简单DTrace 探测器
68 操作系统介绍:OpenSolaris 项目简明使用手册• 2006 年12 月
列出可跟踪的探测器
本实践的目标是更详细地研究探测器,并说明如何列出系统上的探测器。
总结
在前面的示例中,您学习了如何使用两个简单的、名为BEGIN 和END 的探
测器。但是,这些探测器来自何处呢?DTrace 探测器来自一组称为提供
程序的内核模块,其中,每个模块都执行一种特定类型的检测过程来创建
探测器。例如,syscall 提供程序在每个系统调用中提供探测器,fbt 提供
程序在内核的每个函数中提供探测器。
使用DTrace 时,每个提供程序均有机会将可提供的探测器发布到DTrace
框架。然后,您可以启用跟踪操作并将其绑定到已发布的任何探测器。
列出可跟踪的探测器
9 • DTrace入门69
列出可跟踪的探测器
打开终端窗口。
键入以下命令:
# dtrace
dtrace 命令选项将列出在输出中。
键入带有-l 选项的dtrace 命令:
# dtrace -l | more
ID PROVIDER MODULE FUNCTION NAME
1 dtrace BEGIN
2 dtrace END
3 dtrace ERROR
4 lockstat genunix mutex_enter adaptive-acquire
5 lockstat genunix mutex_enter adaptive-block
6 lockstat genunix mutex_enter adaptive-spin
7 lockstat genunix mutex_exit adaptive-release
--More--
此时会使用以下五个数据段列出系统中可用的探测器:
■ ID-所列探测器的内部ID。
■ Provider-提供程序的名称。提供程序用于对探测器进行分类。这也是
检测过程所用的方法。
■ Module- Unix 模块或探测器应用程序库的名称。
■ Function-探测器所在函数的名称。
■ Name-探测器的名称。
将上面的命令传输到wc 以查找系统中探测器的总数:
# dtrace -l | wc -l
30122
系统当前识别的探测器的数量将会列在输出中。该数量会根据系统类型而
有所不同。
添加以下选项之一以过滤列表:
■ -P(表示提供程序)
1
2
3
4
5
列出可跟踪的探测器
70 操作系统介绍:OpenSolaris 项目简明使用手册• 2006 年12 月
■ -m(表示模块)
■ -f(表示函数)
■ -n(表示名称)
以下面的示例为例:
# dtrace -l -P lockstat
ID PROVIDER MODULE FUNCTION NAME
4 lockstat genunix mutex_enter adaptive-acquire
5 lockstat genunix mutex_enter adaptive-block
6 lockstat genunix mutex_enter adaptive-spin
7 lockstat genunix mutex_exit adaptive-release
输出中仅列出了lockstat 提供程序中的探测器。
# dtrace -l -m ufs
ID PROVIDER MODULE FUNCTION NAME
15 sysinfo ufs ufs_idle_free ufsinopage
16 sysinfo ufs ufs_iget_internal ufsiget
356 fbt ufs allocg entry
输出中仅列出了UFS 模块中的探测器。
# dtrace -l -f open
ID PROVIDER MODULE FUNCTION NAME
4 syscall open entry
5 syscall open return
116 fbt genunix open entry
117 fbt genunix open return
仅列出了函数名称为open 的探测器。
# dtrace -l -n start
ID PROVIDER MODULE FUNCTION NAME
506 proc unix lwp_rtt_initial start
2766 io genunix default_physio start
2768 io genunix aphysio start
5909 io nfs nfs4_bio start
上面的命令列出了探测器名称为start 的所有探测器。
列出可跟踪的探测器
9 • DTrace入门71
使用D编程
至此,您已大致了解了如何命名、启用和列出探测器,现在便可以尝试编
写最简单的DTrace 版程序"Hello, World"。"
总结
本实践表明,除了在命令行中构造DTrace 实践脚本之外,还可以使用D
编程语言在文本文件中编写实践脚本。
使用D 编程
72 操作系统介绍:OpenSolaris 项目简明使用手册• 2006 年12 月
编写DTrace 程序
打开终端窗口。
在文本编辑器中,创建名为hello.d 的新文件。
键入您的第一个D程序:
BEGIN
{
trace("hello, world");
exit(0);
}
保存hello.d 文件。
使用dtrace -s 选项运行该程序:
# dtrace -s hello.d
dtrace: script ’hello.d’ matched 1 probe
CPU ID FUNCTION:NAME
0 1 :BEGIN hello, world
#
如您所见,dtrace 列出的输出与前面相同,后跟文本"hello, world"。和
前面的示例不同,您不需要等待,也不需要按Ctrl-C。这些变化是在
hello.d 中为BEGIN 探测器指定操作的结果。为了解所发生的情况,让我
们来看看D程序的详细结构。
1
2
3
4
5
使用D 编程
9 • DTrace入门73
讨论
每个D程序均由一系列子句组成,每个子句用于描述一个或多个要启用的
探测器,以及触发探测器时要执行的一组可选操作。这些操作以一系列括
在大括号{ } 中的语句形式列出,跟在探测器名称后面。每条语句都以分
号(;) 结尾。
您的第一条语句使用函数trace() 来指示DTrace 应在触发BEGIN 探测器时
记录指定的参数(字符串"hello, world"),然后将其显示出来。第二条
语句使用函数exit() 来指示DTrace 应停止跟踪并退出dtrace 命令。
DTrace 提供了一组诸如trace() 和exit() 的有用函数,供您在D程序中
调用。要调用函数,请指定函数名称,并后跟用括号括起的参数列表。有
关全套D函数的描述,请参阅《Solaris 动态跟踪指南》。
如果您熟悉C 编程语言,则此时您可能已从名称和示例中了解到,DTrace
的D编程语言与C 以及awk(1) 非常相似。实际上,D源自一个大型的C
子集和一组可简化跟踪的特定函数和变量。
如果您以前编写过C 程序,则可将大部分知识应用到用D生成跟踪程序中
来。如果您以前从未编写过C 程序,学习D也很容易。不过,让我们首先
从语言规则开始,进一步了解DTrace 的工作方式,然后再返回来学习如
何生成更有趣的D程序。
使用D 编程
74 操作系统介绍:OpenSolaris 项目简明使用手册• 2006 年12 月
使用DTrace 调试应用程序
目的
本章旨在使用DTrace 来监视应用程序事件。
10 1 0
75
其他资源
《Application PackagingDeveloper's Guide》。SunMicrosystems, Inc.,
2005。
使用DTrace 调试应用程序
76 操作系统介绍:OpenSolaris 项目简明使用手册• 2006 年12 月
启用用户模式探测器
使用DTrace,您可以将探测器动态添加到用户级函数中。用户代码不需
要任何重新编译、特殊标志乃至重新启动。只需调用提供程序即可打开
DTrace 探测器。
探测器描述的语法如下:
pid:mod:function:name
■ pid: 格式pid processid(例如pid5234)
■ mod: 库或a.out(可执行文件)的名称
■ function: 函数名称
■ name: entry 表示函数入口return 表示函数返回值
 
 

以上文章转自于 : http://developers.sun.com.cn/
阅读(470) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~