37

标题几乎说明了一切......这是一个坏主意吗?我想要 XDebug 在服务器上提供的增强调试消息。

[编辑] 只是为了让事情清楚。我知道存在安全风险。也许我应该补充我的问题,并给出更准确的理由为什么我想这样做。

我们的生产服务器还托管一个测试平台。有时我们使用它在尽可能接近生产的环境中测试事物。我正在寻找的主要内容是使用 XDebug 的增强var_dump().

这不是用于高流量应用的应用服务器,性能也不是什么大问题。我只是好奇 XDebug 是否会显着影响性能。

此外,我想我只能为定义测试站点的 VirtualHost 启用它。

4

11 回答 11

45

除了调试消息无法在已经投入生产的应用程序中显示这一显而易见的事实,以及我不知道您为什么喜欢这样的事实之外,还有一些非常糟糕的事情。

第一个是当您向服务器添加调试行为时,调试引擎“附加”到 PHP 进程并接收引擎在断点处停止的消息,这是不好的,因为引入了另一个进程的高性能打击停止或“保留” PHP 解析器。

另一个大问题是,当安装调试器时,至少大多数调试器往往有在服务器中打开端口的讨厌习惯,因为它们不适用于生产环境,而且您可能知道,任何打开的软件服务器中的端口为周围的任何黑客打开了一扇门。

如果您需要在您的代码中进行调试,那么在您的应用程序中,如果不可用,则实现一个调试系统,因为大多数框架都内置了该系统。设置一个配置值,例如 DEBUG_ENABLED 并在抛出异常时,如果未启用,重定向到一个小页面,否则重定向到一个带有调试信息的丑陋页面,但要小心你在服务器上显示的调试信息。我希望这可以澄清一切。

编辑显然我的回应没有足够的记录,你应该检查这些来源

最后,有一件事我没有说,因为我认为它有点含蓄:不这样做是常识!出于与将调试工具放在不同环境中相同的原因,您不会将调试工具放在生产服务器上,因为您需要将不必要的东西远离它。在服务器上运行的任何进程,无论它多么轻量级,都会影响您的性能。

于 2010-08-19T13:40:50.943 回答
17

减速4倍

我做了一些测试,只是启用了模块,没有实际调试,使我的开发机器上的请求从 1 秒减慢到 4 秒左右

于 2012-09-05T09:44:47.550 回答
11

完全删除 xdebug(即使它没有启用)给了我们 50% 的页面加载提升(从 60 毫秒降低到 30 毫秒)。我们让 xdebug 处于“休眠”状态(等待触发)。我们认为既然它处于休眠状态,它不会造成任何伤害,但男孩我们错了。

我们在 21:43 左右注释掉了 php 配置中的 zend_extension 行。每个核心的平均负载也从 0.4 下降到 0.2:

在此处输入图像描述

于 2018-11-20T18:53:27.223 回答
4

你到底为什么想要这样的东西?在部署到生产之前进行调试。它会使应用程序变慢。

于 2010-08-19T13:23:28.270 回答
1

您永远不应该将其保留在生产中。

您的应用程序永远不需要打印出“那些不错的调试消息”,因为它们对您的用户一点都不友好。它们是测试不佳的标志,它们会扼杀用户的信任,尤其是在企业/电子商务环境中。

其次,您透露的技术信息越详细,您被黑客入侵的可能性就越大(特别是如果您已经透露您的代码实际上存在问题!)。生产服务器应该将错误记录到文件中,并且从不显示它们。

执行速度是您最不关心的问题,无论如何它都会受到它的影响,内存也会受到影响。

于 2010-08-19T13:28:43.187 回答
1

Xdebug 用于将完整的堆栈跟踪添加到错误日志中,即 display_errors ini 值,当然应该是 Off(即使在开发中我也不想要这个)。除非您启用 remote_attach ini 设置,否则它不允许远程连接到调试器。虽然速度较慢,但​​如果您遇到诸如最大内存分配或分段错误之类的 PHP 神秘错误,这是您查看实际发生位置的唯一方法。

于 2012-11-15T00:02:07.100 回答
1

您始终可以使用完全相同的配置克隆您的实时服务器,但它不会公开。然后你可以在它上面安装 XDebug 并在几乎完全相同的条件下调试东西(好吧,现实生活和克隆之间的负载会有所不同,但其余的都是一样的)。在这种情况下,您在实时环境中调试事物,但实际生活不受影响。

注意:显然它不适用于任何人。不是每个人都可以轻松克隆服务器。如果您使用 AWS 等云服务,那将非常容易。如果您使用 Ansible、Chef、Puppet 等服务器配置工具来构建服务器,这也是小菜一碟。

于 2016-10-18T08:14:17.407 回答
1

我知道这是一篇旧文章,但由于 Xdebug 的问题仍然存在 10 年,我想指出相关的错误报告(作为 WONTFIX NOTABUG 关闭):https ://bugs.xdebug.org/view .php?id=1668

Tl;博士:

只需安装 xdebug 将(在 linux @least 上)减慢网站上的所有 php 速度,即使所有标志都设置为 OFF,命中率也会从 2 倍到 20 倍不等。 永远不要在生产环境中安装 xdebug。更好的是,调查侵入性较小的调试选项。

于 2020-04-06T08:23:23.470 回答
0

您永远不应在生产服务器上显示调试错误消息。这对您的用户来说很丑陋,而且还存在安全风险。我相信它也会让它慢一点。

于 2010-08-19T13:27:14.650 回答
0

我使用这个php 基准测试工具测试了性能影响。免责声明我构建了该工具。

答案是 xdebug 模块显着减慢了代码执行速度:从 2 倍到 7 倍,具体取决于测试。这是我的结果:

# env information
php version        :     7.4.5
platform           : WINNT x64

# disable xdebug extension in php.ini
$ php src/benchmark.php --iterations 1000 --time-per-iteration 50 --save xdebug_off

# enable xdebug extension
$ php src/benchmark.php --iterations 1000 --time-per-iteration 50 --save xdebug_on

# compare
$ php src/compare.php --file1 benchmark_xdebug_off_20201127-0946.txt --file2 benchmark_xdebug_on_20201127-0939.txt
------------------------------------------------
test_math                  OFF       ON
mean               :      3762      531   -85.9%
median             :      4226      568   -86.6%
mode               :      4655      596   -87.2%
minmum             :       918      188   -79.5%
maximum            :      4722      612   -87.0%
quartile 1         :      3081      490   -84.1%
quartile 3         :      4580      595   -87.0%
IQ range           :      1498      105   -93.0%
std deviation      :       984       87   -91.1%
normality          :     11.0%    11.0%
------------------------------------------------
test_strings
mean               :      1419      677   -52.3%
median             :      1521      688   -54.7%
mode               :      1580      974   -38.4%
minmum             :       537       90   -83.2%
maximum            :      1629     1071   -34.3%
quartile 1         :      1319      452   -65.7%
quartile 3         :      1582      892   -43.6%
IQ range           :       262      440    67.8%
std deviation      :       226      248     9.8%
normality          :      6.6%     6.6%
------------------------------------------------
test_loops
mean               :      8131     1208   -85.1%
median             :      8617     1240   -85.6%
mode               :      9109     1407   -84.6%
minmum             :      3167      589   -81.4%
maximum            :      9666     1435   -85.2%
quartile 1         :      7390     1116   -84.9%
quartile 3         :      9253     1334   -85.6%
IQ range           :      1863      217   -88.3%
std deviation      :      1425      164   -88.4%
normality          :      5.6%     5.6%
------------------------------------------------
test_if_else
mean               :    279630    31263   -88.8%
median             :    293553    31907   -89.1%
mode               :    303706    37696   -87.6%
minmum             :    104279    12560   -88.0%
maximum            :    322143    37696   -88.3%
quartile 1         :    261977    28386   -89.2%
quartile 3         :    307904    34773   -88.7%
IQ range           :     45927     6387   -86.1%
std deviation      :     39034     4405   -88.7%
normality          :      4.7%     4.7%
------------------------------------------------
test_arrays
mean               :      5705     3275   -42.6%
median             :      5847     3458   -40.9%
mode               :      6040     3585   -40.6%
minmum             :      3366     1609   -52.2%
maximum            :      6132     3645   -40.6%
quartile 1         :      5603     3098   -44.7%
quartile 3         :      5965     3564   -40.3%
IQ range           :       361      465    28.8%
std deviation      :       404      394    -2.5%
normality          :      2.4%     2.4%
------------------------------------------------
于 2020-11-27T05:54:47.153 回答
-1

如果你“做对了”,你可以在生产中使用 XDebug。您可以在“休眠”模式下启用扩展,该模式仅通过通过特定主机名称的请求才能生效。在此处查看详细信息:

http://www.drupalonwindows.com/en/content/remote-debugging-production-php-applications-xdebug

于 2017-01-28T12:03:09.397 回答