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

Issue with Newrelic PHP APM Plugin - Crashing, Zombies, PHP-FPM and Nginx

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

我们能够在有问题的情况下安装插件,无问题地更新配置,无问题地启动服务。然而,不久之后 php_agent.log 开始显示它无法连接到守护程序并继续失败。

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

我能够在我所有的网络服务器上重现这个问题。我什至启动了一个全新的盒子并部署了它,添加了与其他盒子相同的配置,并且在启动后不久它也开始僵尸化。

我的配置如下:

雪上加霜的是,如果我们离开僵尸太久,它最终会导致网站在所有服务器上崩溃。真的,后背痛。

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

谢谢!

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

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

,您可能还有一个 permission issue

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

每个 NewRelic:

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

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

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

我们目前实施的解决方法是删除 /tmp/.newrelic.sock 中的默认套接字文件,然后发出 service newrelic-daemon stop,然后 service httpd stop,最后服务 httpd 启动。 (我已经看到 httpd 的简单重启有时不起作用)这个问题将阻碍 PHP 代理在 CentOS 7 上的所有全新安装。另一件需要注意的事情是 nginx 和 [=28= 的默认单元文件]-fpm 也使用私有临时目录,因此也存在同样的潜在问题。