WEB开发网
开发学院操作系统Linux/Unix 动态跟踪工具 阅读

动态跟踪工具

 2009-09-06 00:00:00 来源:WEB开发网   
核心提示: -@@syscall:*:read:exit这指定在退出 read 系统调用时触发探测,星号表示所有进程的 read 系统调用都应该探测,动态跟踪工具(5),-@@interval:*:clock:500这指定每隔 500 毫秒(时钟时间)触发一次探测,星号是一个占位符,为了使用 dtrace

- @@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 

上一页  1 2 3 4 5 6 7  下一页

Tags:动态 跟踪 工具

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接