使xdebug远程debugging使Apache服务器非常缓慢

如果通过设置xdebug.remote_enable=1启用xdebug,则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远程debugging并启用PHPStorm中的侦听侦听时,需要一段时间停止在断点处,但不像禁用phpstormdebugging侦听那么慢。

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

感谢您的帮助。

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

 xdebug.remote_autostart = 1 

php.ini中设置。 这会导致xdebug 尝试连接到每个请求的远程debugging器 。 我在请求中有一些PHP处理的样式,auto_preppend_file和其他PHP文件,并且每个文件都等待大约2秒,这就加起来了。 像15秒左右。 设置

 xdebug.remote_autostart = 0 

彻底解决了这个问题。 只有当debuggingcookie存在时, xdebug才会连接。 请注意,如果您不在debugging会话中,则需要删除debuggingcookie / param才能使此修补程序正常工作

这是我用来设置xdebug的configuration 。

XDebug的性能也很差(在6秒内加载validation码,而不是毫秒)本页的注释让我找出原因。

closures分析器,加载时间除以3.仍然慢,但已经好了。

 xdebug.profiler_enable = 0 

就像进一步的参考一样,如果有人有相同/类似的问题…(60秒超时)

首先检查xdebug.remote_autostart是否被禁用,以避免自动连接。
正如@LazyOne指出的, @Tomáš Fejfar解释的。

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

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

所以,在阅读Xdebug文档并检查我的configuration后,
我发现我已经启用了xdebug.remote_connect_back

xdebug.remote_connect_back
types :布尔值,默认值:0,在Xdebug> 2.1中引入
如果启用,xdebug.remote_host设置将被忽略,Xdebug将尝试连接到发出HTTP请求的客户端 。 它检查$ _SERVER ['REMOTE_ADDR']variables以找出使用哪个IP地址。 请注意,没有可用的筛选器,任何可以连接到Web服务器的人都可以启动debugging会话,即使他们的地址与xdebug.remote_host不匹配。

所以所有对服务器的调用都试图进行debugging,使服务器非常慢,也不安全。

禁用此选项,并validation我有明确的xdebug.remote_host指向我的机器, 我得到了一个可接受的响应〜1秒。 并且只有当cookie被启用时

所以简而言之,我的configuration文件最终是这样的:

 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 

我正在使用PHPStorm 7.1和由Xampp 1.8.2安装的Apache服务器,所有这一切都在Windows 8.1下进行。 当设置了断点时,我在debugging模式下遇到了Chrome和PHPStorm之间的慢速互操作性。

通过安装最新版本的XDebug dll(使用XDebug向导来确定要下载哪个版本),速度得到了显着的改善,将你的php / ext目录下的dll拷贝到php.ini中,这样新的XDebug dll就会被加载。 停止启动Apache并查看其差异。

我可以使用内部Eclipse Web浏览器validation在使用Eclipse(Juno with PDT)debuggingWeb应用程序时发生类似的性能提升。

这很可能是有一些networking超时发生在这里。 找出问题的最好方法是尝试debugging命令行脚本。 如果仍然存在相同的问题,那么请使用strace来查看它挂载的内容:

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

然后看看/tmp/strace.log ,看看减速发生的地方。

在我的情况下,低性能是由在PHPStorm中设置了200多个断点造成的,这些断点是由xdebug在每个请求上评估的。

清除PHPStorm中的断点可将性能从每个请求60秒增加到6秒。