如何释放 PHP-FPM 内存?

如何释放 PHP-FPM 内存?

有多个讨论抱怨 的内存占用过高PHP-FPM,但没有任何实用方法可以解决。当我通过大量测试探索该问题时,发现该问题与 age 的年龄有关PHP-FPM

假设我们有pm.max_children= 10,并且有一个 PHP 脚本消耗 10M 内存。预计需要 100MB。这对于前 10 个进程是正确的。处理 20 个 PHP 脚本后,系统内存使用量为 200MB,这意味着前 10 个进程消耗的内存尚未释放。

这将增加内存使用量,直到pm.max_requests进程PHP-FPM被重置。

笔记:这只是为了说明而粗略简化的示例,而不是实际行为。在现实世界中,有时会发生这种情况。通常,在 PHP 脚本结束时,PHP 消耗的内存将自动释放。在 PHP-FPM 中,这些内存sometimes(我不知道什么时候)不会被释放。

这意味着处理类似的脚本(使用 10MB 内存)时

pm.max_children = 10
pm.max_requests = 100

您不需要 100MB 或 1000MB 的内存;而是介于两者之间的内存。换句话说,一些 PHP 的足迹previous processes仍留在PHP-FPM子代上。

根据这一理论,PHP-FPM可以通过减少来解决的 高内存使用率问题pm.max_requests,但这不是最终的解决方案,我们需要找到一种方法来释放以前的 PHP 进程对子进程的影响PHP-FPM。有什么想法吗?

答案1

如果不知道您正在运行什么类型的应用程序,我们很难说您应该怎么做。但是,您考虑过使用按需进程管理器吗?它会在 N 次后终止进程,从而比您可能正在使用的动态或静态进程管理器更节省内存。

相关内容