更新我注意到,与一个特定的require_once('myobject.php')内存增加出现。这个require_once()有条件地运行。当我将if语句中的require_once()语句移出所以它一直加载时,内存增加就消失了。对我来说没有意义,但问题解决了。我不确定这实际上是一个“答案”,所以我将不予答复。这是一个php内存泄漏?
我在我页面的页脚有memory_get_usage()
,每次刷新页面时,我都会看到它每次增加大约100K。我的页面加载创建了许多对象,并在完成后将其销毁。我的每个父对象都有__destruct()
,它使用unset()
与所有子对象。具有引用的子对象返回给父对象,它们具有__destruct()
到unset()
这些引用。
在处理我的页面的不同部分之前和之后插入memory_get_usage()
只会告诉我由于脚本的该部分而增加了多少总使用量。如何确定哪些内存丢失,并且在页面加载完成后不回收垃圾回收?我有一个全局$ _SESSION var包含对象存储用户信息,但已经验证使用strlen(序列化($对象)),该对象不增长的大小。
我认为我所看到的是内存泄漏,并且脚本结束后,php垃圾回收应该有效。任何想法如何调试?
有人可以纠正我,如果我错了,但如果你有一个标准的Apache和PHP设置,PHP进程在请求完成后被销毁,所以它不会在请求之间使用内存。所以'unset()'不重要(跨请求)。对于php-fpm,这可能会有所不同,我不确定。但可能没有内存泄漏,但可能会增加一些会话文件的大小,因此下次加载时会更大。 – Matt
@Matt为什么你没有发布这个答案,这将是一个很好的答案。 – Vallentin
当然,我认为我的答案可以详细阐述,但我现在将其发布为起点。 – Matt