为什么DTrace不输出函数返回日志?

时间:2014-03-03 03:07:40

标签: solaris dtrace

当我的程序收到TCP连接请求时,它调用spawn_thread()来添加总线程号,并生成子线程来处理TCP连接。当子线程完成任务时,它会关闭TCP连接,并调用delete_thread()减少总线程数。

我使用以下DTrace脚本来跟踪总线程数,输出包括时间戳,线程ID和总线程数:

#!/usr/sbin/dtrace -qs

pid$1:asg:delete_thread:entry,
pid$1:asg:delete_thread:return,
pid$1:asg:spawn_thread:entry,
pid$1:asg:spawn_thread:return
{
    printf("%Y [%d][%s][%s]:thread_pool.total_threads=%d\n", walltimestamp, tid, probefunc, probename, *(int32_t*)copyin(0x00634548, 4));
}  

但是在运行一段时间后,我发现以下奇怪的输出日志:

2014 Mar  3 02:13:49 [18355][delete_thread][entry]:thread_pool.total_threads=99
2014 Mar  3 02:13:49 [18355][delete_thread][return]:thread_pool.total_threads=98
2014 Mar  3 02:13:49 [57][spawn_thread][entry]:thread_pool.total_threads=98
2014 Mar  3 02:14:04 [57][spawn_thread][entry]:thread_pool.total_threads=98
2014 Mar  3 02:14:04 [57][spawn_thread][return]:thread_pool.total_threads=99

第3行和第4行都输出“[57] [spawn_thread] [entry]”,我无法理解它,并认为它们之间应该有“[57] [spawn_thread] [return]”。任何人都可以解释它,或者它可能是DTrace的错误吗?

0 个答案:

没有答案