标题几乎说明了一切……这是一个坏主意吗?我希望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%
------------------------------------------------
文章标签:performance , php , production-environment , xdebug
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!
评论已关闭!