gpt4 book ai didi

php - PHP在单次请求中分配的内存是不是总是在最后释放?

转载 作者:可可西里 更新时间:2023-11-01 13:51:09 25 4
gpt4 key购买 nike

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

我读到 PHP 会自动释放每个请求中使用的内存,这要归功于 Zend 内存管理器: http://www.webreference.com/programming/php_mem/2.html

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

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

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

最佳答案

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

一个更大的问题是 Apache 子进程内部有 PHP 的内存空间。它们膨胀到分配一个 PHP 脚本的内存使用峰值,然后维持这个内存分配直到子进程被杀死(一旦一个进程要求内核分配一部分内存,该内存将不会被释放直到进程死亡).有关为什么这是一个问题以及如何解决它的更详细解释,请参阅我在 Server Fault 上的回答。 .

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

您可以使用 memory_get_usage() 监控您的 PHP 脚本使用了多少内存和 memory_get_peak_usage() - 在 PHP manual 中也有关于内存使用和如何进行防御性编程的很好解释。 .

PHP 的内存管理在this article 中有详细解释。 .

编辑:您可以使用 httpd -l 确定编译到 Apache 的模块 - 默认值因操作系统分布和存储库配置而异。有很多方法可以将 PHP 连接到 Apache - 最详细的 here .

关于php - PHP在单次请求中分配的内存是不是总是在最后释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7456333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com