0

我一直在尝试为我的 Web 服务器安装 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)
  • 新遗物守护进程 (4.23.4.113-1)
  • 新遗物 PHP5 (4.23.4.113-1)
  • Newrelic PHP5 通用 (4.23.4.113-1)

雪上加霜的是,如果我们让僵尸离开太久,它最终会使网站在所有服务器上崩溃。确实,腰疼。

我将不胜感激任何人可能有的任何帮助或想法,因为这让我发疯。

谢谢!

4

3 回答 3

0

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

于 2015-10-22T22:00:21.460 回答
0

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

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

于 2015-10-23T21:47:10.983 回答
0

根据 NewRelic:

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

所以,总而言之,问题有两个方面:

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

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

于 2015-10-29T21:54:17.157 回答