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

建立讨论tracing工具的邮件列表

有时我会在公众号后台收到关于使用tracing工具的问题。说实话,我的答案不一定是对的或最优的,所以就想建立一个邮件列表,这样大家都可以看到问题,并参与讨论。另外,邮件列表的一个好处就是保存文档比较好,这样日后查阅起来比较方便。我不确定会有多少人会加入,所以周四就在公众号上问了一下,还是收到了一些响应,那就建一个吧。

其实,目前所有的工具都有专门的邮件列表,但都是英文的。那我想就建立一个使用中文讨论的邮件列表吧。讨论的话题就是所有在工作中使用的tracing工具,不仅限于DTracesystemtap, perf_eventsLTTng等等都可以。欢迎所有对tracing工具感兴趣的朋友[……]

阅读全文

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[......]

阅读全文

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

DTrace脚本使用选项时需要注意的问题

DTrace可以通过-x指定编译或运行时的选项。以下列命令为例:

# dtrace -n 'syscall::write:entry /pid == $target/ { printf("Written %d bytes\n", arg2); }' -c "dd if=/dev/zero of=/dev/null count=1"
dtrace: description 'syscall::write:entry ' matched 2 probes
1+0 records in
1+0 records out
512 bytes transferred in 0.00003[......]

阅读全文

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

使用DTrace和火焰图分析Rust程序

这篇文章参考自Rust Profiling with DTrace and FlameGraph on OSX ,不同之处在于我使用的是操作系统是FreeBSD。使用DTrace和火焰图分析Rust程序的步骤如下:

(1)如果编译Rustrelease版本程序,需要在Cargo.toml加入下列配置:

[profile.release]
debug = true

(2)运行Rust程序(名字为stream),并使用DTrace进行采样:

dtrace -c './stream' -o out.stacks -n 'profile-997 /execname == "[......]

阅读全文