问题与Newrelic PHP APM插件-崩溃,僵尸,PHP- fpm和Nginx



我一直在尝试为我的Web服务器安装PHP APM插件,但是我遇到了瓶颈,需要一些帮助。

我们能够在问题内安装插件,没有问题地更新配置,并且没有问题地启动服务。但是,不久之后,php_agent.log开始显示它无法连接到守护进程,并且继续失败。

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

我可以在我所有的web服务器上复制这个问题。我甚至启动了一个全新的盒子并部署它,添加了与其他盒子相同的配置,它在启动后不久也开始僵尸化。

我的配置如下:

  • CentOS 7 (kernel 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)

雪上加霜的是,如果我们离开僵尸太久,它最终会使所有服务器上的网站崩溃。真是后顾之忧。

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

谢谢!

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

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

我以前也遇到过同样的问题。我所做的唯一一件事就是把它重新安装到一个新的应用程序上。好运rpm.newrelic.com/accounts/{yourid}/应用

Per NewRelic:

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

所以,总的来说,这个问题有两个方面:

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

当前我们实现的解决方案是删除/tmp/.newrelic的默认套接字文件。Sock,然后发出服务newrelic-daemon停止,然后发出服务HTTPD停止,最后发出服务HTTPD启动。(我看到httpd的普通重启有时不起作用)这个问题将阻碍CentOS 7上所有PHP代理的新安装。另一件需要注意的事情是nginx和php-fpm的默认单元文件也使用私有临时目录,因此受到相同的潜在问题的影响。

最新更新