我使用strace在Linux上捕获对open()、close()和read()的调用。目标进程是jetty web服务器。据我所知,strace并没有记录对open()的所有调用。也许其他的也是如此,我没有尝试将文件描述符与open()调用关联起来。
例如,starting strace:
strace -f -e trace=open,close,read -o/tmp/strace.out -p62881
然后,我使用wget获取100个静态文件;所有文件都被成功获取。在一次运行中,只记录了56个打开的事件;在另一次运行100个不同的文件时,我获得了66个打开的事件。
我相信使用"-f“会导致strace附加到线程的所有LWPID(”进程62881附加了25个线程-中断退出");当我尝试使用多个"-p“选项显式地附加到所有线程时,我得到一条" attach”成功消息,但得到多条“操作不允许的消息”,每个子PID一个。
在测试之前,我重新启动了Jetty以清除其缓存。
内核版本为2.6.32-504.3.3.el6.x86_64 (Red Hat)。Strace包版本为strace-4.5.19-1.19.el6.x86_64。
我遗漏了什么?
谢谢
发布于 2018-08-18 12:45:49
在某些系统上,您必须使用openat()而不是open()。
尝试:strace -f -e trace=openat,close,read -o/tmp/strace.out -p62881
发布于 2016-04-14 04:32:16
尝试-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.https://stackoverflow.com/questions/36607245
复制相似问题