【问题标题】:Debugging hung php调试挂起的php
【发布时间】:2010-09-20 19:49:24
【问题描述】:

我有一个偶尔挂起的 php Web 应用程序。当我导航到该页面时,它只会坐在那里尝试加载数小时,即使最大执行次数为 210。这是一个应用程序在代理后面使用 curl 来下载内容。错误报告设置为全部,但这并不重要,因为页面是空白且挂起的。

我在调试挂起的 PHP 进程时找不到任何东西。

【问题讨论】:

    标签: php debugging process hung


    【解决方案1】:

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

    它的IO,所以php只是抛出一些系统库,然后调用“select”等待它回​​来。

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

    【讨论】:

      【解决方案2】:

      要查看幕后发生的情况,您可以安装 xdebug,然后启用触发分析 (?XDEBUG_PROFILE=1)...它将输出日志到与 kcachegrind/etc 兼容的文件系统...您可以用于查看执行挂起的位置。

      当然,这很可能是卷曲问题....

      【讨论】:

        【解决方案3】:

        我敢赌它是一个卷曲问题。几年前我有一个类似的问题,我添加了一个特定的 curl 选项,它有时会挂起脚本。我希望我能准确地记住问题是什么,但我相信最终是 curl 链接到了下面的错误库。 (edit) 实际上,我很确定这是我的情况下的 SSL 库,因为 curl 使用的是旧版本的 openssl。

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

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

        【讨论】:

          【解决方案4】:

          Xdebug 是个好主意,如果没有帮助,我还建议通过 ktrace、strace 或 truss 运行您的网络服务器。它可以准确地向您展示它的作用以及它可能挂在哪里。

          听起来有一个临时的连接问题,或者您的应用程序依赖的其他东西被阻止了。

          如果您使用 Apache,请查看Apache HTTP Debugging Guide。该指南有点以 *nix 为中心,但可以应用于任何网络服务器。

          除了调试您的网络服务器之外,我还建议您添加检查您的代理是否始终处于启动/响应状态并且下载源始终可用。可以使用nagios 之类的工具或Pingdom 之类的第三方服务添加这些检查。最后但同样重要的是,它也可能是一个临时的 DNS 问题,因此您可以使用 IP 连接到代理和下载源和/或添加对 DNS 服务的监控。

          HTH

          【讨论】:

            【解决方案5】:

            这听起来很蹩脚,但只需在页面请求的一开始就打开一个文件句柄,然后开始对 /tmp/debug.txt 进行 fwrites 。查看最后一个写入的位置,然后开始将各种变量值回显到该区域的文件中。使用二分搜索理论将您的 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");
            

            【讨论】:

              猜你喜欢
              • 2015-02-15
              • 1970-01-01
              • 1970-01-01
              • 2016-01-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多