我对PHP中的内存泄漏感到有点困惑。
我已经读过,由于Zend Memory Manager,PHP会自动释放每个请求中使用的内存: http://www.webreference.com/programming/php_mem/2.html
但是我看到很多人和主题(即使在这里也是如此)关注PHP和内存泄漏。
所以我觉得我失去了一些东西。
在不同请求之间是否可能在PHP中发生内存泄漏?
答案 0 :(得分:8)
不可能在不同的请求之间(当使用默认的Apache配置时)从PHP脚本中泄漏内存,因为在该请求结束时释放一个请求中使用的变量和代码,并且PHP的内存分配器重新启动下一个请求。但是,PHP解释器或扩展中的错误可能会单独泄漏内存。
更大的问题是Apache子进程内部有PHP的内存空间。他们膨胀以分配PHP脚本的峰值内存使用量,然后保持这个内存分配,直到子进程被终止(一旦进程要求内核分配一部分内存,该内存将不会被释放,直到进程终止)。如需更详细地解释为什么这是一个问题以及如何解决它,请参阅Server Fault上的答案。
脚本中的内存泄漏,其中变量未被设置且PHP垃圾收集器失败,这是非常罕见的 - 大多数PHP脚本运行几百毫秒,这通常不足以显示甚至严重的内存泄漏
您可以使用memory_get_usage()
和memory_get_peak_usage()
监控PHP脚本使用的内存量 - 还可以很好地解释内存使用情况以及如何在PHP manual中进行防御性编程。< / p>
在this article中详细解释了PHP的内存管理。
编辑您可以使用httpd -l
确定已编译到Apache的模块 - 默认值因操作系统分发和存储库配置而异。有很多方法可以将PHP与Apache连接起来 - 最详细的here。