怎么用truss监控进程
?? 最近因为一个程序bug需要用truss监控进程的系统调用情况。一点心得,记录在此。
?
?? 原因是一个C++程序,在调用system()方法时,有时会变得很慢,所以用truss监控一下哪里出了问题。
?
?? 首先是参数,-D 可以显示每条系统调用的时间花费,-d 可以显示时间戳,最重要的是-f , 因为是通过system()方法调用系统方法,会fork新的进程,所以要用-f 监控子进程的状况。
?
?? 还有一点就是,我的进程在SUN Cluster 监控之下,所以要先释放出来
??? 尝试清空内容的话,你会发现文件大小没有变化,用vi打开,内容的确没了,但是你会发现vi显示有很多的 null character,用less命令打开就会发现很多的^@。我曾经尝试过很多方法,都没办法真正的rotate原始的truss.out。
?
??? 解决办法也很简单,那就是不要用-o 选项去指定输出文件,而是用重定向(redirect),但是你如果直接用
time truss -dDeal -t '!lwp_park' -f $command >> truss.out 2>&1 &??
?? 这样可以记录整个命令的执行时间。
?