NewRelic PHP代理添加了多少开销?

时间:2014-03-28 00:36:32

标签: 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真正做了什么导致了额外的开销?
  • 使用它时有哪些其他负面影响?

2 个答案:

答案 0 :(得分:6)

您的里程可能因设置,您的特定网站代码库等而异。

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

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

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

我的建议是:

  • if(function_exists ( $function_name ))块中包含对新文件功能的任何调用,这样如果新文件模块未加载,您的代码可以正常运行
  • 如果您在共享相同代码的负载均衡器后面有多个相同的服务器,则只在一个映像上启用php模块以节省性能。如果你使用新的遗物,你可以保持sysmon的运行。
  • 如果您只有一台服务器,只需在需要时启用共享的php模块 - 当您实际分析您的代码或mysql时,除非10-20%的性能不受影响。问题。

另一件事要记住,如果您的主要信息来源是新的遗物网站:他们通过您监控的机器数量获得报酬,因此不要指望他们说服您不要使用它即使不需要,也可以使用少于100%的机器。我认为他们的常见问题解答或博客基本上表明你应该期待一些性能影响,但如果你按预期使用它并修复你从中看到的问题,你应该收回延迟丢失。我同意,但我认为一旦你解决了这些问题,就把曝光限制在所需的最小服务器数量上。

答案 1 :(得分:0)

代理不应该按照设计的方式增加很多开销。由于充分解决问题所需的详细程度,这似乎是一个很好的问题,在https://support.newrelic.com