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

动态跟踪工具

 2009-09-06 00:00:00 来源:WEB开发网   
核心提示: 场景 2在中间件环境中(例如 WebSphere® 或 TXSeries®),应用程序的业务逻辑在应用服务器上运行,动态跟踪工具(7),在这种复杂的环境中,运行应用程序的客户常常抱怨响应时间太长,在 Solaris 和 AIX 系统上还有许多探测可用,它们有助于诊断生产系统中的问

场景 2

在中间件环境中(例如 WebSphere® 或 TXSeries®),应用程序的业务逻辑在应用服务器上运行。在这种复杂的环境中,运行应用程序的客户常常抱怨响应时间太长。为了找到性能瓶颈,必须了解在为最终用户请求服务的过程中应用程序所交互的软件花费的时间。

中间件软件作为驻留应用程序的环境,可以提供跟踪不同软件组合花费的时间所需的代码。但是,这会产生比较大的开销。

可以使用 dtrace 了解这方面的信息,这不会影响性能,也不需要修改应用程序或中间件软件。可以使用它跟踪各个软件模块的进入和退出时间戳,从而收窄导致性能瓶颈的软件范围。

例如,如果一个应用程序与 DB2® 数据库交互,用户发现它的响应很慢,那么可以编写一个 D 脚本,跟踪应用程序内花费的时间和执行数据库操作花费的时间。

可以使用下面这样的 D 脚本完成这个任务:

pid$target::sqlastrt:entry 
{ 
self->time=timestamp; 
} 
pid$target::sqlastop:entry 
/self->time != 0/ 
{ 
 printf("Time spent in sql call %d nsecs\n",timestamp - self->time); 
 self->time=0; 
} 

这里的 self 标识符声明一个线程局部变量 time。应用程序中的每个线程都有自己的局部变量 time,因此每个应用程序线程可以跟踪自己的时间。

AIX ProbeVue 使用示例

下面的探测脚本使用用户函数进入探测跟踪 malloc 例程,显示分配的内存量。

   #!/usr/bin/probevue 
   char * malloc(int size); 
   @@uft:$1:*:malloc:entry 
   { 
     printf("malloc(%d)\n",__arg1); 
   } 

调用这个脚本,传递希望跟踪其 malloc 调用的进程的进程 ID。

__arg1、__arg2、__arg3 等是内置的进入类变量,它们引用传递给函数的参数。$1 替换为传递给脚本的进程 ID。

#malloc.d <process id> 

要想查看 malloc 调用的调用堆栈,可以在前面的脚本中调用 stktrace() 探测函数。

结束语

本文简要介绍了动态跟踪工具,通过示例演示了几个探测的使用方法。在 Solaris 和 AIX 系统上还有许多探测可用,它们有助于诊断生产系统中的问题。在 Solaris 和 AIX 的手册中可以找到所有探测的完整列表及其使用方法。

上一页  2 3 4 5 6 7 

Tags:动态 跟踪 工具

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