更新我注意到,與一個特定的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