但是在生产中使用它的缺点是什么?
PHP监视代理程序用作.so扩展名.如果我理解正确,它会连接到另一个系统聚合服务,该服务会过滤数据并将其推送到NewRelic云中.
这仅仅意味着它在引擎盖下透明地工作.但是,这是真的吗?
任何监视,分析或api服务都会给整个堆栈增加一些开销.
扩展本身是0.6 MB,这加起来每个PHP进程,这不是很多,所以我担心的是cpu和IO.
该图显示了使用NewRelic代理(顶部蓝色代码)和代理程序(其他行)的生产EC2 t1.micro实例上的cpu利用率
> NewRelic真正做了什么导致额外的开销?
>使用它时还有其他不利方面吗?
您所看到的额外开销减少了使用的内存,但是对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))块中包含对新relic函数的任何调用,这样如果未加载新的relic模块,代码可以无错误地运行
>如果在共享相同代码的负载均衡器后面有多个相同的服务器,则只在一个映像上启用PHP模块以节省性能.如果你使用新的遗物,你可以保持sysmon的东西运行.
>如果您只有一台服务器,只需在需要时启用共享的PHP模块 – 当您实际分析代码或MysqL时,除非性能下降10-20%
另一件事要记住,如果您的主要信息来源是新的遗物网站:他们通过您监控的机器数量获得报酬,所以不要指望他们说服您不要在任何低于100%的机器上使用它你的机器,即使它不需要.我认为其中一个常见问题解答或博客基本上表明您应该期待一些性能影响,但如果您使用它并预测从中看到的问题,您应该收回延迟丢失.我同意,但我认为一旦你解决了这些问题,就将暴露限制在所需数量最少的服务器上.