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

时间:2013-07-19 00:36:58

标签: xdebug phpstorm

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

我在这里找到了同样的问题:XDebug really slow,但答案没有帮助。我没有启用分析:

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调试侦听一样慢。

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

感谢您的帮助。

11 个答案:

答案 0 :(得分:53)

在我的情况下,这是由于

引起的
xdebug.remote_autostart = 1

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

xdebug.remote_autostart = 0

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

这是my config that I use to setup xdebug

答案 1 :(得分:23)

使用XDebug也经历了低性能(在6秒而不是毫秒内加载Captcha) 这个页面的评论让我找到了原因。

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

xdebug.profiler_enable = 0

答案 2 :(得分:21)

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

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

  

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

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

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

  

<强> xdebug.remote_connect_back
  类型:布尔值,默认值:0,在Xdebug中引入&gt; 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"

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

修改
正如 @ Riimu &amp; @ jdunk 指出 感谢两者 ,您可能还需要设置:
*有关详细信息,请参阅注释

xdebug.remote_cookie_expire_time = 0
// or
xdebug.remote_cookie_expire_time = -9999

答案 3 :(得分:3)

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

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

我可以验证使用内部Eclipse Web浏览器使用Eclipse(带有PDT的Juno)调试webapp时会出现类似的性能提升。

答案 4 :(得分:2)

此外,如果您确实希望一直保持 xdebug.remote_autostart = 1 的状态,请在Phpstorm设置中尝试增加同时显示的最大部分。根据我的经验,这应该可以减少悬挂和阻塞,但是仍然会对性能产生影响。

enter image description here

答案 5 :(得分:1)

这可能会发生一些网络超时。找出问题的最佳方法是尝试调试命令行脚本。如果仍有同样的问题,请使用strace查看其中的内容:

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

然后查看/tmp/strace.log并查看减速发生的位置。

答案 6 :(得分:1)

在我看来,性能低下是由于PHPStorm中设置了200多个断点,xdebug每次请求都会对其进行评估。

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

答案 7 :(得分:0)

有时候,如果您在端口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
        }
    ]
}

答案 8 :(得分:0)

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

答案 9 :(得分:0)

我在使用docker容器和Visual Studio Code时遇到了相同的问题

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

感谢@tomáš-fejfar

答案 10 :(得分:0)

对我来说我

xdebug.remote_connect_back = 1

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