是PHP在单个请求中分配的总在最后释放的内存


Is the memory allocated by PHP in a single request always released at the end?

我对PHP中的内存泄漏有点困惑。

我读到PHP是自动释放在每个请求中使用的内存感谢Zend内存管理器:http://www.webreference.com/programming/php_mem/2.html

但是我看到很多人和话题(甚至在这里)都在关注PHP和内存泄漏。

所以我觉得我正在失去一些东西。

是否有可能在不同请求之间的PHP内存泄漏?

在不同请求之间PHP脚本不可能有内存泄漏(当使用默认的Apache配置时),因为在一个请求中使用的变量和代码在该请求结束时被释放,PHP的内存分配器为下一个请求重新启动。然而,PHP解释器或扩展中的错误可能单独泄漏内存。

一个更大的问题是Apache的子进程内部有PHP的内存空间。它们扩展到分配PHP脚本的峰值内存使用,然后维护这个内存分配,直到子进程被终止(一旦进程请求内核分配一部分内存,该内存将不会被释放,直到进程死亡)。有关为什么会出现这个问题以及如何解决这个问题的更详细的解释,请参阅我在服务器故障中的回答。

脚本中的内存泄漏(变量未被取消设置并且PHP垃圾收集器失败)是非常罕见的——大多数PHP脚本运行几百毫秒,这通常不足以出现严重的内存泄漏。

你可以监控你的PHP脚本在memory_get_usage()memory_get_peak_usage()中使用了多少内存——在PHP手册中也有关于内存使用和如何防御编程的很好的解释。

PHP的内存管理将在本文中详细解释。

edit:您可以使用httpd -l确定在Apache中编译的模块-默认值因操作系统发行版和存储库配置而异。有很多方法可以将PHP连接到Apache,这里是最详细的。