首页 文章

这是一个php内存泄漏?

提问于
浏览
0

UPDATE 我注意到,特定的require_once('myobject.php')显示内存增加 . 这个require_once()是有条件地运行的 . 当我将require_once()语句移出if语句以便它一直加载时,内存增加就消失了 . 不确定这实际上是"answer"所以我会不予回答 .

我在页面的页脚中有 memory_get_usage() ,每次刷新页面时,我都会看到它每次增加大约100k . 我的页面加载会创建许多对象并在完成后销毁它们 . 我的父对象每个都有 __destruct() ,它使用 unset() 和所有子对象 . 具有引用返回父对象的子对象具有 __destruct()unset() 这些引用 .

在处理我页面的不同部分之前和之后插入 memory_get_usage() 只会告诉我由于该部分脚本而添加了多少总使用量 . 在页面加载完成后,如何确定丢失内存并且不回收垃圾回收?

我有一个全局$ _SESSION var包含存储用户信息的对象,但已经使用strlen(serialize($ object))验证了此对象的大小没有增长 .

我认为我所看到的是内存泄漏,并且脚本结束后php垃圾收集应该生效 . 任何想法如何调试这个?

1 回答

  • 2

    如果我错了,有人可以纠正我,但如果你有一个标准的Apache和PHP设置,PHP进程在请求完成后被销毁,所以它不会在请求之间使用内存 .

    所以 unset()__destruct() 等并不重要(跨请求) . 当PHP进程结束时,将回收所有内存 .

    但很可能,没有内存泄漏,但可能会有一些会话文件的大小增加,因此下次加载时会更大 .

    注意:对于php-fpm,这可能有所不同,我不确定 .

相关问题