动态跟踪工具
2009-09-06 00:00:00 来源:WEB开发网- @@syscall:*:read:exit
这指定在退出 read 系统调用时触发探测。星号表示所有进程的 read 系统调用都应该探测。
- @@interval:*:clock:500
这指定每隔 500 毫秒(时钟时间)触发一次探测。星号是一个占位符,用于在以后支持更细粒度的探测点。
说明 Solaris dtrace 使用方法的场景
场景 1
客户报告在运行他的应用程序(假设是 C 应用程序)时出现了一个内存泄漏问题。技术支持团队很难重现这个问题,因为很难在实验室中复制客户的环境。
下面的示例说明如何使用 D 脚本帮助收窄内存泄漏原因的范围,而不需要修改应用程序或系统环境,也不需要停止系统运行。这个示例可以应用于任何使用 malloc 和 free 例程分配和释放进程内存的 C 应用程序。
为了使用 dtrace 找到应用程序中可能的内存泄漏位置,创建一个名为 malloc.d 的 D 脚本,其内容如下:
pid$target::malloc:entry
{
printf("malloc: PID %d requested %d bytes\n",$target,arg0);
}
pid$target::malloc:return
{
printf("malloc: PID %d returned address 0X%x\n",$target,arg1);
}
pid$target::free:entry
{
printf("free: PID %d freeing address 0X%x \n",$target,arg0);
}
用 dtrace 实用程序调用这个应用程序(myapp,源代码文件 myapp.c):
dtrace –c ./myapp –s malloc.d
输出如下:
dtrace: script 'malloc.d' matched 20 probes
dtrace: pid 6592 exited with status 1
CPU ID FUNCTION:NAME
0 39972 malloc:entry malloc: PID 6592 requested 100 bytes
0 39974 malloc:return malloc: PID 6592 returned address 0X20fa0
0 39972 malloc:entry malloc: PID 6592 requested 100 bytes
0 39974 malloc:return malloc: PID 6592 returned address 0X21010
0 39981 free:entry free: PID 6592 freeing address 0X20fa0
0 39981 free:entry free: PID 6592 freeing address 0X21010
更多精彩
赞助商链接