电脑技术学习

跟踪 UNIX 应用程序的解决方案

dn001

  在这里,它没有提供我们需要的信息。现在试试 pfiles(见清单 9)。

  清单 9. 使用 pfiles

$ pfiles 15856 
15856: ./errlock 
 Current rlimit: 256 file descriptors 
  0: S_IFCHR mode:0620 dev:292,0 ino:989038936 uid:101 gid:7 rdev:24,3 
   O_RDWR|O_NOCTTY|O_LARGEFILE 
   /dev/pts/3 
  1: S_IFCHR mode:0620 dev:292,0 ino:989038936 uid:101 gid:7 rdev:24,3 
   O_RDWR|O_NOCTTY|O_LARGEFILE 
   /dev/pts/3 
  2: S_IFCHR mode:0620 dev:292,0 ino:989038936 uid:101 gid:7 rdev:24,3 
   O_RDWR|O_NOCTTY|O_LARGEFILE 
   /dev/pts/3 
  3: S_IFREG mode:0666 dev:182,65545 ino:198 uid:101 gid:10 size:0 
   O_RDWR 
   advisory write lock set by process 15828 
   /export/home/mc/lockdemo 

  这些输出就比较有用了。可以看到进程已经打开的文件称为 lockdemo ,因为 truss 显示正在等待文件锁,所以可能是这个文件导致了问题。

  truss 和 strace 都是被动的跟踪。可以查看正在执行的函数,但是无法了解关于正在发生的情况的详细信息,也无法更有针对性地指定要跟踪的东西和跟踪时要输出的信息。

  用 DTrace 进行动态跟踪

  Solaris、FreeBSD 和 Mac OS X 内置的 Dynamic Tracing (DTrace) 功能提供一个更加动态的跟踪环境。与 truss 和相似的工具不同,可以使用 DTrace 检查正在运行的程序的内部情况,而不只是查看系统调用。另外,可以使用 DTrace 编写应用程序跟踪脚本,从而定制在跟踪过程中希望提取的信息。

标签: