我正在使用strace来捕获Linux上对open(),close()和read()的调用。目标进程是jetty Web服务器。据我所知,strace没有记录所有对open()的调用。也许其他人也一样,我没有尝试将文件描述符关联到open()调用。
例如,启动strace:
strace -f -e trace = open,close,read -o / tmp / strace.out -p62881
然后我使用wget获取100个静态文件;所有都被成功检索。在一次运行中,仅记录了56个公开事件;在100个不同文件的另一次运行中,我得到了66个公开活动。
我相信使用“-f”会导致strace附加到线程的所有LWPID(“Process 62881附带25个线程 - 中断退出 “);当我尝试使用多个”-p“选项显式附加到所有选项时,我得到一个”附加“成功消息,但是多个”操作不允许消息“,每个子PID一个。
我在测试之前重新启动Jetty以清除其缓存。
内核版本是2.6.32-504.3.3.el6.x86_64(Red Hat)。 Strace包版本是strace-4.5.19-1.19.el6.x86_64。
我错过了什么?
由于
答案 0 :(得分:3)
在某些系统上,您必须使用openat()而不是open()。
尝试:
strace -f -e trace=openat,close,read -o/tmp/strace.out -p62881
答案 1 :(得分:0)
尝试-ff
(除-f
之外):
-ff: If the -o filename option is in effect, each processes trace is written to filename.pid where pid is
the numeric process id of each process. This is incompatible with -c, since no per-process counts are
kept.