1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

在OmniOS上使用DTrace

OmniOS上使用DTrace需要手动安装dtrace和 dtrace/providers安装包:

$ pfexec pkg install dtrace dtrace/providers

否则会遇到如下错误:

$ pfexec dtrace -n 'syscall:::'
dtrace: failed to initialize dtrace: DTrace device not available on system

此外还要检查DTrace模块是否加载成功:

$ modinfo | grep dtrace
  5 fffffffff8243000  1[......]

阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (1评分, 平均分: 5.00)
Loading...

DTrace支持从DWARF数据中获取函数信息

Oracle工程师Alan Coopersmith的社交账号了解到,在最新的Oracle Solaris 11.4中,DTrace可以从DWARF数据中获取函数信息了:

Capture

用户可以使用uresolve选项指定用户地址空间(user address)的格式。当uresolve=basename时,可以把地址和源代码文件以及行号关联起来。这个功能要求在编译程序时指定-g选项,只有这样才会产生DWARF格式的调试信息。具体的描述请参考这里:https://docs.oracle.com/cd/E37838_01/html/E61035/gqsfh.html#scrolltoc。[……]

阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (1评分, 平均分: 5.00)
Loading...

DTrace中的progenyof()函数

关于progenyof()函数的介绍

int progenyof(pid_t pid)

progenyof returns non-zero if the calling process (the process associated with the thread that is currently triggering the matched probe) is among the progeny of the specified process ID.

也就是当前触发probe的进程是progenyof()参数pid的“子孙进程”,progenyof()返回非0值;反[……]

阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

DTrace脚本运行时参数

Shell脚本类似,DTrace脚本也可以接收运行时参数:$0扩展为脚本名,$1扩展为第一个参数,$2扩展为第二个。。。Macro Arguments文档提供了一个tracewrite.d例子:

#!/usr/sbin/dtrace -s

syscall::write:entry
/pid == $1/
{
}

需要注意的是如果在脚本中使用了$1$2这些参数,在执行脚本时一定要提供这些参数:

# ./tracewrite.d 123

否则直接运行脚本就会报出如下错误:

# ./tracewrite.d
dtrace: failed to compile sc[......]

阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

“dynamic variable drops”错误解析

DTrace中关联数组(associative array)所占据的内存容量是由可调节参数dynvarsize决定的。由于每次DTrace脚本运行时,内存都会根据dynvarsize分配好。因此一旦耗尽,就会报出“dynamic variable drops”的错误。以下列程序为例:

dtrace -n 'int t[int]; tick-1ms { t[timestamp] = timestamp }'  

运行结果如下:

# dtrace -n 'int t[int]; tick-1ms { t[timestamp] = timestamp }'
dtrace: des[......]

阅读全文