启用xdebug远程调试使apache服务器非常慢

Wil*_*don 49 xdebug phpstorm

如果我通过设置启用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
Run Code Online (Sandbox Code Playgroud)

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

当启用xdebug远程调试并且我在PHPStorm中启用调试侦听时,在断点处停留需要一段时间,但不会像禁用phpstorm调试侦听一样慢.

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

感谢您的帮助.

Tom*_*far 56

在我的情况下,这是由于有

xdebug.remote_autostart = 1
Run Code Online (Sandbox Code Playgroud)

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

xdebug.remote_autostart = 0
Run Code Online (Sandbox Code Playgroud)

完全解决了这个问题.xdebug 仅在调试cookie存在时才连接.请注意,如果您没有在此调试的调试会话中,则需要删除调试cookie/param.

这是我用来设置xdebug的配置.

  • 谢谢@Tomáš Fejfar 我设置了禁用两件事请建议我是对的吗?xdebug.remote_autostart = 0 xdebug.profiler_enable = 0 (2认同)

use*_*220 24

使用XDebug也经历了低性能(在6秒而不是毫秒内加载Captcha)此页面上的备注让我找到了原因.

关闭探查器并将加载时间除以3.仍然很慢,但已经更好了.

xdebug.profiler_enable = 0
Run Code Online (Sandbox Code Playgroud)


gmo*_*gmo 21

正如进一步参考...以防任何人有相同/类似的问题...(60秒超时)

xdebug.remote_autostart禁用第一次双重检查以避免自动连接.
正如所@LazyOne指出的那样,也@Tomáš Fejfar解释了.

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

有了这个,当调试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地址.请注意,没有可用的过滤器,任何可以连接到Web服务器的人都可以启动调试会话,即使他们的地址与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"
Run Code Online (Sandbox Code Playgroud)

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

编辑:
正如@ Riimu&@ jdunk指出的那样,感谢两者,您可能还要设置:
*请参阅注释以获取详细信息

xdebug.remote_cookie_expire_time = 0
// or
xdebug.remote_cookie_expire_time = -9999
Run Code Online (Sandbox Code Playgroud)

  • 我还想指出,如果您使用GET值来激活调试器,您可能还想将`xdebug.remote_cookie_expire_time`设置为0.否则xdebug将自动设置调试cookie,这将在以后的调用中触发远程调试器. (2认同)

小智 7

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

在此处输入图片说明


小智 6

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

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


Der*_*ick 1

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

export XDEBUG_CONFIG="idekey=yourname"
strace -tt -o /tmp/strace.log php full/path/to/script.php
Run Code Online (Sandbox Code Playgroud)

然后看一下/tmp/strace.log速度变慢的地方。