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

“arg0…arg9”和args[]

一直以来没太注意“arg0...arg9”和args[]之间的区别,基本就是混用。前几天在调试一个DTrace脚本时,才注意起来,也在DTracemailing list里讨论了一下。以下就是我做的一些总结:

(1) “arg0...arg9”是64位整数类型。如果probe有参数,都可以通过“arg0...arg9”访问。args[]里每个参数的类型与具体的probe相关,probe不一定会提供args[]

(2)可以使用“dtrace -lvn”命令来检查probe是否提供了args[]参数,举个例子:

bash-3.2# dtrace -lvn proc:::signal-[......]

阅读全文

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

使用DTrace调试进程不能收到信号的问题

前几天,同事提到商用系统上出现过使用kill命令给进程发送SIGKILL信号,进程无法退出的问题。尽管听起来有些不可思议,但是的确发生了。由于当时的环境没有保存下来,所以现在没法debug。我考虑了一下,如果再发生,可以使用DTrace去检查一下问题出现在哪里。

kill命令给进程发送信号可以分成3个步骤:
(1)kill命令成功发送信号;
(2)进程收到信号;
(3)进程开始处理信号。
我们可以用DTrace检查步骤(1)和(2),如果能证明进程的确收到信号,那么十之八九就是程序逻辑的问题了。

首先要做的是检查步骤(1),这个可以使用Brendan Gregg的DTraceTo[……]

阅读全文

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

DTrace tricks and tips (12) –指定程序链接库作为module的命名规则

有时,我们需要使用DTrace追踪程序的链接库的函数,这时module名字就应该是链接库的名字。什么样的名字是有效的呢?让我做个实验验证一下。

我的程序链接了MySQLclient库,执行下面这些命令:

bash-3.2# dtrace -n 'pid$target::mysql_real_connect:entry' -p 10848
dtrace: description 'pid$target::mysql_real_connect:entry' matched 1 probe
^C

bash-3.2# dtrace -n 'pid$target:mysqlclien[......]

阅读全文

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

DTrace tricks and tips (11) –如何运行带参数的命令

使用DTrace运行不带参数的命令很简单。假设程序名字叫“a”,执行这个命令即可:“dtrace -n 'pid$target::sigaction:entry' -c ./a”。如果程序需要参数(假设为“-x”),如何运行呢?

试着执行如下命令:

bash-3.2# dtrace -n 'pid$target::sigaction:entry' -c ./a -x
dtrace: option requires an argument -- x

可以看到DTrace会报错。改正方法是用引号把命令和参数引用起来,如下所示:

bash-3.2# dtrace -n 'pid[......]

阅读全文

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

DTrace profile provider详解

DTrace中,profile provider是一种特殊的provider,这个provider提供的probe起到一种类似定时器的作用。它可以根据用户设置的频率周期性地触发,这样用户就可以定期地采集感兴趣的数据,汇总以后作分析。

Profile provider提供两种probeprofile-ntick-n。其中n代表每秒probe触发的频率,n后面也可以带上时间后缀。举个例子:profile-100nsns表示纳秒),表示每100纳秒触发一次。两种probe的区别在于:每个CPU都会触发执行profile-n probe,而只有一个CPU会触发执行tick-n probe,所[……]

阅读全文