Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调试挂起的php_Php_Debugging_Process_Hung - Fatal编程技术网

调试挂起的php

调试挂起的php,php,debugging,process,hung,Php,Debugging,Process,Hung,我有一个偶尔挂起的php web应用程序。当我导航到页面时,它会在那里等待数小时,即使最大执行量是210。这是一个应用程序,它在代理后面使用curl来下载东西。错误报告设置为all,但这并不重要,因为页面为空白且挂起 我找不到任何关于调试挂起的PHP进程的信息。上次我检查时,HTTP/IO操作发生在PHP时间之外,因此可能是CURL正在消亡或超时 它是IO,所以php只是抛出到某个系统库,然后调用“select”等待它返回 如果它不回来。。php代码甚至不会循环,因此甚至不知道它不会回来 我敢打

我有一个偶尔挂起的php web应用程序。当我导航到页面时,它会在那里等待数小时,即使最大执行量是210。这是一个应用程序,它在代理后面使用curl来下载东西。错误报告设置为all,但这并不重要,因为页面为空白且挂起


我找不到任何关于调试挂起的PHP进程的信息。

上次我检查时,HTTP/IO操作发生在PHP时间之外,因此可能是CURL正在消亡或超时

它是IO,所以php只是抛出到某个系统库,然后调用“select”等待它返回


如果它不回来。。php代码甚至不会循环,因此甚至不知道它不会回来

我敢打赌这是一个卷发问题。几年前,我添加了一个特殊的curl选项,这个选项偶尔会挂起脚本,我也遇到了类似的问题。我希望我能准确地记得问题是什么,但我相信最终的结果是curl链接到了错误的库。(edit)实际上,我很确定我的例子中是SSL库,因为curl使用的是较旧版本的openssl

我建议首先删除所有
curl\u setopt()
调用,然后再将它们重新添加进来,看看是否可以隔离错误。我认为如果在命令行上运行等效的curl命令,您可能会立即看到错误


我通过更新curl使用的openssl库修复了它。

要查看幕后发生的情况,可以安装xdebug,然后启用触发式评测(?xdebug_PROFILE=1)。。。它将向与kcachegrind/etc兼容的文件系统输出日志。。。。可以用来查看执行挂起的位置

当然,这很可能是一个卷曲问题……

是一个好主意,如果没有帮助,我还建议通过ktrace、strace或truss运行您的Web服务器。它准确地向你展示了它的功能和可能悬挂的位置

听起来好像存在临时连接问题,或者应用程序所依赖的其他东西被阻止

如果您使用Apache,请检查。该指南有点以*nix为中心,但可以应用于任何Web服务器

在调试Web服务器的基础上,我还建议添加检查代理是否始终处于启动/响应状态,以及下载源是否始终可用。可以使用类似工具或类似第三方服务添加这些检查。最后但并非最不重要的一点是,这也可能是一个临时DNS问题,因此您可以使用IPs连接到代理和下载源和/或添加对DNS服务的监控


HTH

这听起来很蹩脚,但只需在页面请求的最开始打开一个文件句柄,然后开始编写/tmp/debug.txt。查看最后一个变量的写入位置,然后开始将各种变量值回送到该区域的文件中。使用二进制搜索理论将您的fwrite分布到代码上分辨率越来越高的部分

i.e.

$fh = fopen("/tmp/debug.txt", "w");

fwrite($fh, "made it to here 1 \n");

//some code

fwrite($fh, "made it to here 2 \n");

//more code

fwrite($fh, "made it to here 3 \n");