Newrelic PHP APM插件的问题 - 崩溃,僵尸,PHP-FPM和Nginx

时间:2015-10-22 21:31:34

标签: php nginx newrelic apm

我一直在尝试为我的网络服务器安装PHP APM插件,但是我已经碰壁并需要一些帮助。

我们可以在问题中安装插件,更新配置而不会出现问题,并且可以毫无问题地启动服务。但是,不久之后,php_agent.log开始显示它无法连接到守护程序并继续失败。

我已经检查了该守护程序并且它显示它正在运行,但是我发现该进程实际上已经僵尸并且已经死了。重新启动PHP-FPM会移除僵尸,服务会再次运行几分钟,但很快就会回到僵尸状态。

我能够在所有网络服务器上复制此问题。我甚至开了一个全新的盒子并进行了部署,添加了与其他盒子相同的配置,并且它在启动后不久就开始僵尸了。

我的配置如下:

  • CentOS 7(内核3.10.0-229.11.1.el7.x86_64)
  • PHP-FPM(5.5.30-1.el7.remi)
  • Nginx(1:1.6.3-6.el7)
  • Newrelic Daemon(4.23.4.113-1)
  • Newrelic PHP5(4.23.4.113-1)
  • Newrelic PHP5 Common(4.23.4.113-1)

为了加重伤害,似乎如果我们离开僵尸太长时间,它最终会在所有服务器上崩溃网站。确实,后方的痛苦。

我会感激任何人的帮助或想法,因为这让我疯了。

谢谢!

3 个答案:

答案 0 :(得分:0)

我之前有同样的问题。我唯一做的就是将它重新安装到在新文件上创建的新应用程序。祝好运。 rpm.newrelic.com/accounts/ {yourid} /应用

答案 1 :(得分:0)

您是否有一个进程清除驻留在/ tmp中的文件超过一些设定时间?代理程序和守护程序通过名为/tmp/.newrelic.sock的套接字文件进行通信。如果它消失了,你应该看到" ENOENT"日志中的错误。对于某些位置/文件,您可能还有permission issue

如果套接字文件有问题,请考虑通过在配置文件(newrelic.ini)中设置newrelic.daemon.port来切换到TCP端口而不是套接字文件

答案 2 :(得分:0)

Per NewRelic:

[对于CentOS],httpd的默认systemd单元文件将PrivateTmp指令设置为true,这意味着httpd需要一个私有临时目录供进程使用。因此,我们的PHP代理和守护程序无法在全新安装时进行通信,因为我们的RPM软件包在通过yum安装软件包时会安装套接字文件。此默认套接字文件位于任何专用临时目录之外,这意味着代理和守护程序无法用于通信(由于代理通过httpd进程激活),并且正确的套接字文件不会被激活在重新启动期间创建,因为代理和守护程序将该位置读取为已存在。

总而言之,问题是双重的:

  • 默认httpd安装的私有临时目录阻止我们的PHP代理的默认安装与守护进程通信。
  • 我们的RPM软件包安装的默认套接字文件会阻止在正确的位置创建新的套接字文件

我们实现的当前解决方法是删除/tmp/.newrelic.sock中的默认套接字文件,然后发出服务newrelic-daemon stop,然后服务httpd stop,最后是服务httpd start。 (我已经看到httpd无法正常重启)这个问题将阻碍CentOS 7上PHP代理的所有全新安装。另外需要注意的是nginx和php-fpm的默认单元文件也使用私有临时目录,因此存在相同的潜在问题。