在 php 中,分配用于运行我的脚本的所有内存是在我的页面请求结束时释放的,还是我需要担心随着时间的推移内存泄漏?
5 回答
不。您不需要手动释放(调用unset()
)资源。PHP 将自动执行此操作。在请求生命周期结束时,一切都会被释放。所以不,你不需要为此烦恼。如果你这样做:
<?php
$resource = allocate_heavy_resource();
?>
将$resource
在请求结束时释放,因此不会泄漏内存。如果确实如此,则意味着 PHP 中有一个严重的错误,并且任何关于正常操作的讨论都会通过窗口进行。
编辑:当然有例外。就像持久的数据库连接一样。但这些最终都会得到处理,所以它并不是真正的内存泄漏。
是的,脚本终止后会释放所有内存。但是,基于某些算法,在您的脚本期间可能会发生内存泄漏。您可以使用unset()
释放变量,但与 vanneto 的观点相反,它实际上不会释放内存。
PHP 确实释放了您通过构建对象等声明的内存。仍然存在未释放内存的情况。为此,5.3 版引入了垃圾收集原理。
您可以使用 gc_enable() 函数来执行它。PHP 中的垃圾收集默认情况下是不活动的。
有点,内存泄漏发生在缓存事物时。因此,如果您的 php 脚本中存在内存泄漏,您的 apache 进程将随着时间的推移而增加,您可以在收到这么多请求后重新启动它们。检查您的多处理模块 (MPM) 通常是 prefork 或 worker。
大多数情况下,除非您使用 PHP 进行大量处理,否则这不会对您产生太大影响
http://v1.srcnix.com/2010/02/10/7-tips-to-prevent-php-running-out-of-memory/
我很确定 GC 会自动为您完成。(它甚至关闭打开的 mysql 连接)