Инструменты / Методы отладки утечек памяти / Ошибки использования в PHP - PullRequest
4 голосов
/ 28 июля 2010

У меня есть сценарий командной строки, который запускает array() файлов через цикл и использует имя файла в качестве аргумента для вызова метода вспомогательного объекта.

При каждом запуске скрипта 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 (), пока я не укажу точную проблему, но это кажется утомительным и неэффективным подходом.

1 Ответ

5 голосов
/ 28 июля 2010

Похоже, что xhprof от Facebook обеспечивает профилирование памяти на уровне вызова функции .

(я никогда не использовал его, но очень хочу ...)

...