php-cgi内存使用量高于php的内存限制

php-cgi内存使用量高于php的内存限制

我正在使用 worker MPM 运行 apache,使用 fastcgi 运行 php。

以下是我的 mpm 限制:

StartServers         5
MinSpareThreads      5
MaxSpareThreads      10
ThreadLimit          64
ThreadsPerChild      10
MaxClients           10
MaxRequestsPerChild  2000

我还使用以下命令设置了我的 php-cgi:

PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=500

我注意到,即使启动后,我的 php-cgi 进程平均占用大约 200+mb 的 RAM。但是,我的 php memory_limit 只有 128M。

这是怎么可能的?我该怎么做才能降低 php-cgi 内存消耗?

答案1

在某些情况下,PHP 可能会超出配置的内存限制(在扩展中直接分配的内存),但我怀疑情况可能并非如此。

我注意到我的平均 php-cgi 进程使用了​​大约 200+mb

您是如何测量的?大多数 TXT 段将被共享 - 因此实际内存使用量比您在 /proc 文件系统或 ps/top 中看到的要少得多。虽然您可以尝试解析 lsof 的输出,但实际上我发现退后一步并查看正在进行的请求数(例如,从连接的套接字数)并将其与报告的可用内存(较少的缓冲区/缓存)进行比较更为明智。

答案2

PHP 中的内存限制是内部内存限制 - 即引擎允许用户脚本通过其私有分配器分配的内存量。但除此之外,还有引擎为其内部需求分配的内存,这些内存并不总是计入限制(部分内存计入,但不是全部),还有库分配的内存等。因此,实际内存使用量应略大于memory_limit设置值。

另外,如上所述,一些工具报告的数字是分配给代码、堆栈、操作系统 I/O 缓冲区、库之间的共享内存等的内存,因此请仔细查看您正在检查的数字。

相关内容