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 回答
如果我错了,有人可以纠正我,但如果你有一个标准的Apache和PHP设置,PHP进程在请求完成后被销毁,所以它不会在请求之间使用内存 .
所以
unset()
,__destruct()
等并不重要(跨请求) . 当PHP进程结束时,将回收所有内存 .但很可能,没有内存泄漏,但可能会有一些会话文件的大小增加,因此下次加载时会更大 .
注意:对于php-fpm,这可能有所不同,我不确定 .