在生产服务器上启用XDebug是否会使PHP变慢?

2021/01/30 19:41 · php ·  · 0评论

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

[编辑]只是为了使事情变得清楚。我知道其中涉及安全风险。也许我应该补充我的问题,并给出为什么要这样做的更确切的原因。

我们的生产服务器还托管一个测试平台。有时,我们使用它来在尽可能接近生产环境的环境中测试事物。我要寻找的主要东西是使用XDebug的Enhanced var_dump()

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

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

除了显而易见的事实,即调试消息无法在已经投入生产的应用程序中显示之外,还有我不知道为什么要这么做的事实,还有一些非常不好的事情。

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

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

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

编辑由于我的回复显然没有足够的文档记录,因此您应该检查这些来源

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

减速4倍

我进行了一些测试,仅启用了模块,而没有进行实际调试,这使我对开发计算机的请求从1秒减慢到大约4秒

完全删除xdebug(即使未启用xdebug)也使我们的页面负载提升了50%(从60ms降至30ms)。我们让xdebug处于“休眠”状态(等待触发)。我们认为,由于它处于休眠状态,因此不会造成任何伤害,但是男孩,我们错了。

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

在此处输入图片说明

为什么在地球上想要这样的东西?在部署到生产之前进行调试。这会使应用变慢。

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

您的应用程序不应该打印出“那些不错的调试消息”,因为它们对您的用户根本不是很好。它们是测试不佳的标志,并且会破坏用户的信任,尤其是在企业/电子商务环境中。

Second, the more detailed technical information you reveal, the more you are likely to get hacked (especially if you are already revealing that there ARE in fact problems with your code!). Production servers should log errors to files, and never display them.

Speed of execution is your least concern, anyway it will be impacted by it, as will memory.

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

您始终可以使用完全相同的配置克隆实时服务器,只是它不是公开的。然后,您可以在其上安装XDebug并在几乎完全相同的条件下调试事物(嗯,实际生活和克隆之间的负载将有所不同,但其余部分将相同)。在那种情况下,您可以在实时环境中调试事物,但是实时环境不会受到影响。

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

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

Tl; dr:

仅仅安装xdebug会(在Linux @least上)会使站点上的所有php速度变慢,即使所有标志都设置为OFF,其点击率也从2x到20x。 切勿在生产中安装xdebug-永远。更好的是,研究较少侵入性的调试选项。

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

如果您“正确执行”,则可以在生产中使用XDebug。您可以在“休眠”模式下启用扩展,该扩展仅通过使用特定HOSTS名称的请求才能生效。Se的详细信息在这里:

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

我使用此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%
------------------------------------------------
本文地址:http://php.askforanswer.com/zaishengchanfuwuqishangqiyongxdebugshifouhuishiphpbianman.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!