php - NewRelic PHP 代理增加了多少开销?

标签 php performance profiling monitoring newrelic

NewRelic 绝不是通过许多成功的部署风靡全局。 但是在生产中使用它有什么缺点呢?

PHP 监控代理作为 .so 扩展。如果我理解正确的话,它连接到另一个系统聚合服务,该服务过滤数据并将它们推送到 NewRelic 云中。

这仅仅意味着它在引擎盖下透明地工作。然而,事实真的如此吗? 任何监控、分析或 api 服务都会增加整个堆栈的一些开销。 扩展本身是 0.6 MB,它加起来每个 php 进程,这并不多,所以我关心的是 CPU 和 IO。

woodzu.vipserv.org/ec2-with-newrelic.png 该图显示了使用 NewRelic 代理(顶部蓝色)和不使用代理(其他行)的生产 EC2 t1.micro 实例上的 CPU 利用率

  • NewRelic 到底做了什么导致了额外的开销?
  • 使用它还有哪些负面影响?

最佳答案

您的里程可能会根据设置、您的特定站点的代码库等而有所不同...

您看到的额外开销是使用的内存较少,但跟踪和分析您的 php 代码并收集分析数据以及数据库请求分析。基本上每个 php 函数调用都会有一些额外的开销。如果让 Xdebug 或 ZendDebugger 在机器上运行或进行分析,您会看到类似的开销。任何模块都会使用一些资源,那些深入分析的资源可能是最昂贵的,但我已经看到新遗物有配置设置来回拨它分析的强度,所以你可能能够减轻它的命中率而不是说 Xdebug .

综上所述,使用 newrelic 共享 PHP 模块从他们的站点加载默认设置和配置,当我们为所有生产启用它时,我公司网站的整体服务器响应延迟全面上升了大约 15-20%机器。我只是在谈论 php-fpm 生成初始响应所需的时间。我们的网站是http://www.nara.me . newrelic-daemon 和 newrelic-sysmon 服务也在运行,但我怀疑它们对响应时间有任何影响。

不要误会我的意思,我喜欢新的遗物,但在我的特定情况下的性能命中并没有让我想要让 PHP 模块在我们所有的实时负载平衡机器上运行。我们可能会一直让它在一台机器上运行。我们确实计划让 sysmon 的东西保持 100% 运行,并在我们需要它进行故障排除时禁用该模块。

我的建议是:

  • if(function_exists ( $function_name )) block 中包装对新 relic 函数的所有调用,这样即使没有加载新 relic 模块,您的代码也可以正常运行
  • 如果负载均衡器后面有多个相同的服务器共享相同的代码,请仅在一个图像上启用 php 模块以节省性能。如果为此使用新的遗物,您可以让 sysmon 的东西保持运行。
  • 如果您只有一台服务器,则只在需要时启用共享 php 模块——当您实际分析代码或 mysql 时,除非 10-20% 的性能下降不是问题。

如果您的主要信息来源是新的遗迹网站,请记住另一件事:他们根据您监控的机器数量获得报酬,所以不要指望他们说服您不要在低于此数量的机器上使用它100% 的机器,即使不需要。我认为他们的常见问题解答或博客中的一个基本上声明您应该预料到一些性能影响,但如果您按预期使用它并修复您从中看到的问题,您应该弥补延迟损失。我同意,但我认为一旦你解决了问题,就将暴露限制在所需的最少数量的服务器上。

关于php - NewRelic PHP 代理增加了多少开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22702056/

相关文章:

php - 在 mysql php 中查找讲师空闲时间

phpMyAdmin 用户级别

css - 现代浏览器,底部渐进式渲染和 CSS

python - 你什么时候会使用 reduce() 而不是 sum()?

在 Linux 上确定 clock_gettime 分辨率的正确方法

php - 如何避免此 PDO 异常 : Cannot execute queries while other unbuffered queries are active

php - 在 Typoscript Controller 中渲染链接

php - 与仅处理 ob_get_clean() 的结果相比,将回调传递给 ob_start 有什么好处?

php - Rust regex replace_all 比 PHP regex preg_replace_callback 慢,如何优化?

java - 在客户端分析 Mongo