在Linux上没有记录所有对open()

时间:2016-04-13 18:59:00

标签: linux multithreading strace

我正在使用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。

我错过了什么?

由于

2 个答案:

答案 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.