我有一個命令行腳本,它通過循環運行array()
文件,並使用文件名作爲參數來調用輔助對象上的方法。在PHP中調試內存泄漏/用法錯誤的工具/技巧
每個通過腳本運行PHP的memory_get_usage
報道越來越大的數量
53294264
57019624
61374624
65699176
70230600
75157152
79900392
84630472
89359264
94300016
100031176
105202448
110360808
115777528
121146976
126784824
132366952
,直到我有錯誤了
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted
很顯然,事情正在泄漏內存,或某種全球/靜態存儲區不斷被添加到。在PHP中調試這種錯誤的最佳方法是什麼?在PHP中無意中發生這種常見情況嗎? xDebug有一些神奇的選項可以幫助我確定嗎?其他工具?
我已經想到的最好的方法是跟蹤執行鏈並拋出代碼庫,調用memory_get_usage(),直到找到確切的問題,但這似乎是一種單調乏味的低效方法。
我也有類似的問題http://stackoverflow.com/questions/849549/finding-cause-of-memory-leaks-in - 高-PHP-堆棧。不幸的是,它沒有產生任何'奇蹟'解決方案。 – 2010-07-28 01:39:43
有用的信息,雖然邁克,感謝您的指針。 – 2010-07-28 02:16:00
針對有興趣的人的解決方法。我最終爲我的腳本寫了一個bash包裝器。腳本本身檢查當前內存使用情況(http://us3.php.net/memory_Get_usage)與內存限制(http://us3.php.net/manual/en/ini.core.php#ini.memory - 限制),並且當我們開始用完時,用特定的退出代碼(出口(1))保釋。如果bash腳本檢測到退出代碼,它會自行產生。正在循環的對象是通過從外部源讀取ID列表構建的,並且每次腳本成功通過循環時都會更新此列表。 – 2010-07-29 17:01:36