如果我通过设置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并不慢。
感谢您的帮助。
答案 0 :(得分:53)
在我的情况下,这是由于
引起的xdebug.remote_autostart = 1
在 php.ini 中设置。这会导致xdebug 尝试在每次请求时连接到远程调试器。我在请求中有一些PHP处理样式,auto_preppend_file和其他PHP文件,并且对于它们中的每一个,它等待大约2秒,这加起来......大约15秒左右。设置
xdebug.remote_autostart = 0
完全解决了这个问题。 xdebug仅在存在调试cookie时连接 。请注意如果您不在调试会话中,则需要删除调试cookie / param才能使此修复工作。
答案 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设置中尝试增加同时显示的最大部分。根据我的经验,这应该可以减少悬挂和阻塞,但是仍然会对性能产生影响。
答案 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
减慢了一切,并停止了远程调试的工作。删除后,一切正常。