当前位置: 首页 > 面试题库 >

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

终弘厚
2023-03-14
问题内容

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

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

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

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

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


问题答案:

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

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

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

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

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

  • PHP的XDebug跟踪生产中的开销
  • 小心:XDebug可能会扭曲您的性能数字

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



 类似资料:
  • 我使用PHP-S127.0.0.1:4242命令在本地主机上为php文件启动development server。但我想,我不应该在生产中使用这个东西。目前我正在尝试在VPS上设置我的网站,我不知道如何在端口4242上永远使用ssh启动php服务器。我知道,这可能是很愚蠢的问题,这是我第一次与真正的主持工作 如有任何帮助,我将不胜感激:)

  • 我的XAMPP服务器有问题。我可以毫无问题地启动Apache、FileZilla和其他所有东西,但当我尝试启动MySQL时,它只是说 尝试启动MySQL服务... 它永远都是这样,就像被冻了一样。 有什么好办法吗?

  • 我目前正在使用php。我想将PHP与sql服务器连接,但它不能在生产服务器上工作。它在我的本地机器上工作得很好,因为我在php的扩展文件夹中安装了sql服务器驱动程序,并在php-ini文件中激活了它。我确认驱动程序已经加载到生产驱动程序中,因为它托管在windows服务器中,而不是linux服务器中。我需要帮助,因为相同的脚本,我连接我的本地机器到云sql服务器是相同的脚本,我现在使用连接PHP

  • 我在我的Laravel项目中有这个ajax请求(这是一个简单的版本,但它正在工作): 当我在本地工作,我使用PHP工匠服务ajax调用工作,但当我部署到我的正式服没有(因为路径 /admin/lessons/addMember/licenseMemberId不是服务器中的完整路径)。最好的方法应该是走这条路线,但我不知道怎么走。这是路由表: 有没有办法在参数设置中使用laravel路线?如果没有,

  • 问题内容: 使用javascript有没有办法判断服务器上资源是否可用?例如我有图像1.jpg-5.jpg加载到html页面中。我想每分钟或每分钟调用一个JavaScript函数,以便大致执行以下临时代码… 有什么想法吗?谢谢! 问题答案: 您可以使用类似: 显然,您可以使用jQuery / like执行您的HTTP请求。

  • 我的插座有问题。io作为一名广播员与laravel echo合作。 我试过什么: 我可以看到用户在日志中连接: 我的队列正在运行,正在正确记录所有事件。 我可以在redis控制台中完美地看到redis我的事件和数据库通知。 但是没有广播任何事件,我也没有在laravel echo服务器控制台中看到它们。一切都在我的本地主机上运行,但在生产环境中没有,我失去了理智。 以下是我的laravel ech