描述 `strace` 命令输出

描述 `strace` 命令输出

我有一个 php 进程超过两天都无法完成。

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

答案1

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

如果您不是开发人员:系统手册第 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

相关内容