lockbydist.d
位于DTraceToolkit的Locks
文件夹下,其功能是统计进程在获得“adaptive mutex
”等待时间的分布。脚本代码就一行(略去版权信息):
lockstat:::adaptive-block { @time[execname] = quantiz[......]
lockbydist.d
位于DTraceToolkit的Locks
文件夹下,其功能是统计进程在获得“adaptive mutex
”等待时间的分布。脚本代码就一行(略去版权信息):
lockstat:::adaptive-block { @time[execname] = quantiz[......]
syscallbypid.d
位于DTraceToolkit的Proc
文件夹下,其功能是根据进程的Process ID
,统计syscall Provider
的 probe
的信息。脚本代码如下(略去版权信息):
#pragma D option quiet
dtrace:::BEGIN
{[......]
newproc.d
位于DTraceToolkit的Proc
文件夹下,其功能是打印新执行的进程名字。脚本代码就一行(略去版权信息):
proc:::exec-success { trace(curpsinfo->pr_psargs); }
脚本代码分析如下:
监听exec-succ[......]
可以利用DTrace
的“-F
”选项显示函数之间的调用关系,这对分析代码来说是个绝对好用的工具。以下面脚本为例:
#!/usr/sbin/dtrace -Fs
pid$target:::entry,
pid$target:::return
{
}
syscall:::entry,[......]
由于DTrace probe
在操作系统的kernel
空间执行,所以不能直接访问进程user space
的内容。通常要使用copyin
、copyinstr
这些函数把进程user space
的内容copy
出来。如果程序里的变量是个二级指针,就要相对麻烦一些。以下面程序为例(编译成32
位的程序,所以指针用[……]