异常 PHP 内存消耗

Unusual PHP Memory Consumption

我有 3 个 Apache/PHP7 服务器 运行 在负载平衡器后面。 3 台服务器中的 2 台已经 运行 几年没有出现问题。然而,第三台服务器(最新的服务器)存在 PHP 内存消耗问题。

在实时监控服务器时,我注意到同一个调用(示例:/user/login)第三台服务器需要的内存比另一台服务器多 10 倍。示例:18%MEM 与 1.2 %内存

目前3台服务器都是ansible搭建和管理的,所以3台配置应该是完全一样的。然而,按预期工作的 2 个服务器在我开始使用 ansible 之前就已经存在,因此可以想象在那些不受 ansible 管理的服务器上设置了一个或多个配置。

所有 3 个服务器 运行 完全相同的代码库。所有 3 台服务器目前 运行 正在生产中。

第三台服务器已重建(全新的 VM)数次,但始终存在与以前完全相同的问题。

我 运行 没有想法,如果有任何帮助,我将不胜感激。

注意:我尝试过内存跟踪工具,但我很难在生产中启动它们并运行宁,因为它们相对具有侵入性。

so it's conceivable that there is a config (or configs) set on those servers that is not managed by ansible.

从那里开始。

收集以下信息:

  • PHP版本
    • 和配置
  • Linux内核
    • 和配置(例如 swappiness)
  • libc 版本
  • 网络服务器版本
    • 和配置

假设三台服务器有相同的内存量和相同的进程运行ning,任何差异只能源于那些参数。

您也可以尝试执行示例命令行脚本,看看内存分配异常是否也出现在那里。无论发生什么,你都会学到一些东西;如果它也出现在脚本中,那么通过 strace 或 Valgrind 一次 运行 PHP 二进制文件的单个实例会更容易。

问题似乎出在第三台服务器的 php 配置中。显然,第三台服务器配置为使用 MPM 事件模块,而其他两台服务器配置为使用 MPM Prefork。当我将第 3 个服务器更改为使用 MPM Prefork 时,我看到内存消耗下降到另一个 2 的水平。

我打算进一步调查这个问题,找出为什么另一个 MPM 模块有如此异常的内存消耗。

注意,mpm 配置可在此处找到: /etc/httpd/conf.modules.d/00-mpm.conf