我有一個腳本,在數據庫的一些行上做了大量的處理(大量)。該腳本使用了很多對象,以及一些內部緩存機制。我如何才能知道我的所有內存在PHP中的位置?
在某些時候,我釋放了所有已使用的緩存,以避免只爲緩存的項目使用所有可用的RAM,但使用的內存不會減少。
我已經使用memory_get_usage(true)
來確定腳本正在使用多少內存,但我沒有ideea如何檢測哪些對象仍在RAM中,仍然在吃內存。
簡單的解決方案是回溯所有對象,並確保沒有變量仍然活着並指向它們,並且所有內部緩存實際上都是free'd並且再次測試和測試並進行測試,但是我尋找一個工具或函數調用,它會告訴我「Z類中的變量Y有90%的RAM」,而不必知道和混淆我在這個腳本中使用的所有對象的內部。
除非運行PHP的垃圾收集器,否則unsetting/nulling變量不會立即釋放內存。 GC運行很昂貴,並且PHP不會運行它,直到它必須,例如,當一個操作需要比當前可用的內存更多的內存時。 – 2012-04-03 12:46:45