64

如果我通过设置启用 xdebug xdebug.remote_enable=1,apache 服务器会变得非常慢;一旦我将设置更改为0,这是正常的。

我在这里发现了同样的问题:XDebug 真的很慢,但答案没有帮助。我没有启用分析:

xdebug.profiler_enable=0
xdebug.auto_trace = 0
xdebug.trace_output_dir = /tmp/xdebug
xdebug.trace_output_name = trace.%c

我检查了 /tmp/xdebug 文件夹下没有任何内容。

当启用 xdebug 远程调试并且我在 PHPStorm 中启用调试侦听时,在断点处停止需要很短的时间,但没有禁用 phpstorm 调试侦听那么慢。

我的环境是:本地centos VM上的php + apache + xdebug,我的mysql db和PHPStorm在Windows桌面上进行开发。MySQL 并不慢。

感谢您的帮助。

4

13 回答 13

81

就我而言,这是由于

xdebug.remote_autostart = 1

php.ini中设置。这会导致 xdebug尝试在每个请求上连接到远程调试器。我在请求中有一些 PHP 处理的样式、auto_preppend_file 和其他 PHP 文件,对于它们中的每一个,它等待了大约 2 秒,这加起来是…… 像15秒左右。环境

xdebug.remote_autostart = 0

彻底解决了问题。xdebug仅在存在调试 cookie 时连接。请注意,如果您不在调试会话中,则需要删除调试 cookie/参数才能使此修复工作

这是我用来设置 xdebug 的配置

于 2013-10-09T13:10:25.117 回答
30

体验过 XDebug 的低性能(在 6 秒内而不是毫秒内加载验证码)此页面上的备注让我找到了原因。

关闭分析器,加载时间除以 3。仍然很慢,但已经更好了。

xdebug.profiler_enable = 0
于 2014-06-15T10:22:07.050 回答
27

作为进一步的参考......以防有人遇到相同/类似的问题......(60秒超时)

禁用第一次仔细检查xdebug.remote_autostart以避免自动连接。
正如所@LazyOne指出的,并@Tomáš Fejfar解释为好。

xdebug.remote_autostart
类型:布尔值,默认值:0
通常您需要使用特定的 HTTP GET/POST 变量来启动远程调试(请参阅远程调试)。当此设置设置为 1 时,Xdebug 将始终尝试启动远程调试会话并尝试连接到客户端,即使 GET/POST/COOKIE 变量不存在。

有了这个,当调试cookie不存在时,我恢复了正常速度
...... 但是!......当cookie被手动激活时,我仍然从服务器得到非常慢的响应(60秒超时)。

因此,在阅读了Xdebug 文档并检查了我的配置后,
我发现我启用了xdebug.remote_connect_back

xdebug.remote_connect_back
类型:布尔值,默认值:0,在 Xdebug > 2.1 中引入
如果启用,xdebug.remote_host 设置将被忽略,Xdebug 将尝试连接到发出 HTTP 请求的客户端。它检查 $_SERVER['REMOTE_ADDR'] 变量以找出要使用的 IP 地址。请注意,没有可用的过滤器,任何可以连接到网络服务器的人都可以开始调试会话,即使他们的地址与 xdebug.remote_host 不匹配。

因此,对服务器的所有调用都在尝试调试,这使得服务器非常缓慢且不安全。

禁用此选项并验证我有明确定义的xdebug.remote_host指向我的机器,我得到了可接受的响应〜1秒。并且仅在启用 cookie 时

简而言之,我的配置文件最终是这样的:

zend_extension             = "/absolute/path/to/your/xdebug-extension.so"
xdebug.remote_enable       = 1
xdebug.remote_autostart    = 0
xdebug.remote_connect_back = 0
xdebug.remote_host         = "192.168.1.2"
xdebug.remote_port         = 9000
xdebug.remote_handler      = "dbgp"
xdebug.remote_mode         = req
xdebug.remote_log          = "/tmp/xdebug.log"

etc/php5/conf.d/xdebug.ini注意:我在文件中而不是在php.ini中进行了此更改

编辑:
正如@Riimu@jdunk指出的那样,感谢两者您可能还需要设置:
* 详情请参阅评论

xdebug.remote_cookie_expire_time = 0
// or
xdebug.remote_cookie_expire_time = -9999
于 2014-01-08T16:45:36.633 回答
7

此外,如果您确实想一直启用xdebug.remote_autostart = 1 ,请在您的 Phpstorm 设置中尝试增加最大同时部分。这应该会减少挂起和阻塞,但根据我的经验,仍然会对性能产生影响。

在此处输入图像描述

于 2018-07-19T15:50:39.943 回答
5

在我的情况下,性能低下是由于在 PHPStorm 中设置了 200 多个断点,xdebug 对每个请求都进行了评估。

在 PHPStorm 中清除这些断点可将每个请求的性能从 60 秒提高到 6 秒。

于 2017-05-07T18:59:20.277 回答
3

我正在使用 PHPStorm 7.1 和 Xampp 1.8.2 安装的 Apache 服务器,所有这些都在 Windows 8.1 下。在设置断点时,我确实在调试模式下遇到了 Chrome 和 PHPStorm 之间的缓慢互操作性。

通过安装 XDebug dll 的最新版本(使用XDebug 向导确定要下载的版本),将 dll 复制到 php/ext 目录并更改 php.ini 以加载新的 XDebug dll,速度显着提高。停止启动 Apache 并查看差异。

我可以验证在使用内部 Eclipse Web 浏览器使用 Eclipse(带有 PDT 的 Juno)调试 Web 应用程序时发生了类似的性能提升。

于 2014-01-21T14:31:28.553 回答
2

有时,如果您有其他服务在端口 9000 上工作,Xdebug 将无法在端口 9000 连接到他的服务器,这会使其变慢,因为它会在每个请求上超时。

尝试更改 xDebug 正在侦听的默认端口(9000),我使用 9090 作为示例,但您可以使用您拥有的任何空闲端口:

xdebug.remote_port=9090

然后记住更改 xDebug 在您的 IDE 上侦听的端口,我使用的是 Visual Studio Code:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9090,
            "log": true
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9090
        }
    ]
}
于 2018-11-23T16:07:47.767 回答
2

我在使用 docker 容器和 Visual Studio Code 时遇到了同样的问题,使用了这个

; disables xdebug traces in error messages
xdebug.default_enable = "Off"

谢谢@tomáš-fejfar

于 2019-11-15T17:12:04.353 回答
2

对我来说,Xdebug 版本2.7.2在包含供应商的 autoload.php 时速度很慢Xdebug 版本2.6.0很好。

于 2019-06-27T09:19:10.640 回答
1

这里可能会发生一些网络超时。找出问题所在的最佳方法是尝试调试命令行脚本。如果仍然存在相同的问题,请使用strace查看它挂起的内容:

export XDEBUG_CONFIG="idekey=yourname"
strace -tt -o /tmp/strace.log php full/path/to/script.php

然后看看/tmp/strace.log减速发生在哪里。

于 2013-07-23T09:15:15.213 回答
0

如果有人仍然在 Windows 平台上遇到缓慢的 xdebug,减少断点的数量对我有用。无论出于何种原因,每个断点都会减慢调试速度......

于 2021-10-05T09:10:48.310 回答
0

对我来说,我有

xdebug.remote_connect_back = 1

这减慢了一切并停止了远程调试的工作。一旦我删除它,一切正常。

于 2020-10-26T01:49:24.597 回答
0

只是对生活在 2022 年的人们的提醒。

至少在带有 PHP 8.0 和 xDebug 的 XAMPP 上,“xdebug.remote_autostart=1”参数已重命名为“xdebug.start_with_request=yes”。当浏览器 xDebug-plugin 被禁用时,评论这一行会使渲染速度提高 3 倍。启用后它像往常一样缓慢,但这是可以预料的。

例如,当在 php.ini 上完全禁用 xDebug 时,我的 Laravel 项目会在 600 毫秒内加载具有数十个 Eloquent 查询的非常复杂的控制器路由。当它在“start_with_request”设置为 false 的情况下激活时,它会在 1.6 秒内呈现。当从插件启用调试或“start_with_request”设置为 true 时,大约需要 4.5 秒。

于 2022-02-03T10:31:02.980 回答