如何调试LONG RUNNING php脚本



问题是脚本在很长一段时间后挂起。strace返回类似的内容,而不返回其他内容:

Process 7286 attached - interrupt to quit
restart_syscall(<... resuming interrupted call ...>) = 0
poll([{fd=13, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
clock_gettime(CLOCK_MONOTONIC, {1817569, 74651533}) = 0
clock_gettime(CLOCK_MONOTONIC, {1817569, 74734744}) = 0
clock_gettime(CLOCK_MONOTONIC, {1817569, 74812047}) = 0
poll([{fd=13, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout)
poll([{fd=13, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
....

把调试消息放在这里是最后的手段。。

我可以运行附加了xdebug的脚本,但有没有办法向php进程发送一些POSIX信号,从而触发xdebug转储当前上下文/stacktrace/localvars?

有可能得到php脚本的"死后转储"吗?

Xdebug没有此功能。使用pcntl_signal,然后使用xdebug_print_function_stack是一种选择,但您也可以创建一个"函数跟踪"。这使得Xdebug在每次函数调用发生时都会将其写入磁盘。这应该能够告诉你你的脚本挂在哪里。不过,从我所看到的是,这正在等待IO。

有关函数跟踪的详细信息,请访问http://www.xdebug.org/docs/execution_trace

相关内容

  • 没有找到相关文章

最新更新