描述`strace`命令输出

我有PHP过程不能完成超过2天。

root 26511 0.0 1.6 407788 27684 ? Ss Jul09 0:08 /usr/bin/php action.php 

这是strace命令的输出:

 poll([{fd=7, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout) poll([{fd=7, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) clock_gettime(CLOCK_MONOTONIC, {5533745, 664851437}) = 0 clock_gettime(CLOCK_MONOTONIC, {5533745, 664940247}) = 0 clock_gettime(CLOCK_MONOTONIC, {5533745, 665211013}) = 0 poll([{fd=7, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout) poll([{fd=7, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) clock_gettime(CLOCK_MONOTONIC, {5533746, 666594416}) = 0 clock_gettime(CLOCK_MONOTONIC, {5533746, 666684149}) = 0 clock_gettime(CLOCK_MONOTONIC, {5533746, 666772214}) = 0 poll([{fd=7, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout) poll([{fd=7, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) clock_gettime(CLOCK_MONOTONIC, {5533747, 668356163}) = 0 clock_gettime(CLOCK_MONOTONIC, {5533747, 668447565}) = 0 clock_gettime(CLOCK_MONOTONIC, {5533747, 668538577}) = 0 

你能解释一下这个输出是什么意思吗? 或者,也许我可以使用其他命令获取有关堆栈进程的更多信息。

PHP版本:PHP 5.4.30 CentOS版本6.5

strace命令列出应用程序运行时的系统调用。

如果你不是开发者:系统手册文档systemcalls的第2部分帮助你了解正在发生的事情。

man 2 poll

 DESCRIPTION poll() performs a similar task to select(2): it waits for one of a set of file descriptors to become ready to perform I/O. 

在调查系统调用中请求的事件都是在文件描述符7上读取的,并且从手册页再次读取您的应用程序正在请求的事件:

 POLLIN There is data to read. POLLPRI There is urgent data to read. POLLRDNORM Equivalent to POLLIN. POLLRDBAND Priority band data can be read (generally unused on Linux). 

strace行显示轮询操作超时,文件描述符(#7)没有准备好读取IO。

系统调用clock_gettime() - clock and time functions表示等待一段时间,然后再试一次。

要找出哪个文件导致超时,应该有数字7的符号链接,该整数代表/proc/<PID>/fd/7