问题是脚本在很长一段时间后都会挂起。 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 的脚本,但有没有办法将一些POSIX信号发送到php进程,这会触发xdebug转储当前上下文/ stacktrace / localvars?
是否有可能获得php脚本的'postmortem dump'?
答案 0 :(得分:1)
Xdebug没有此功能。使用pcntl_signal然后使用xdebug_print_function_stack是一个选项,但您还可以创建一个“函数跟踪”。这使得Xdebug一旦发生就将每个函数调用写入磁盘。这应该可以告诉你脚本挂起的位置。从我所看到的是,等待IO。
的功能追踪的更多信息