Как я могу узнать, куда ушла вся моя память в PHP? - PullRequest
3 голосов
/ 03 апреля 2012

У меня есть скрипт, который выполняет большую обработку некоторых строк в БД (их много). Скрипт использует множество объектов и некоторые внутренние механизмы кэширования.

В какой-то момент я освобождаю весь используемый кэш, чтобы не использовать всю доступную оперативную память только для кэшированных элементов, но используемая память не уменьшается.

Я использовал memory_get_usage(true), чтобы определить, сколько оперативной памяти занимает скрипт, но я понятия не имею, как определить, какие объекты все еще находятся в оперативной памяти и все еще потребляют память.

Простое решение состоит в том, чтобы вернуться назад ко всем объектам и убедиться, что все переменные еще не активны и указывают на них, и что все внутренние кэши фактически свободны, и тестировать и тестировать и тестировать снова, но я ищет инструмент или вызов функции , который сказал бы мне, что «переменная Y в классе Z имеет 90% вашей оперативной памяти», без необходимости знать и связываться со всеми внутренними объектами, которые я использую в этом сценарий.

1 Ответ

2 голосов
/ 03 апреля 2012

Почему вы не профилируете свой скрипт?

Используйте xdebug с включенным профилировщиком и выясните, что происходит в вашем файле cachegrind.

Подробнее здесь: http://www.xdebug.org/docs/profiler

Обновление: вы можете получить больше информации, связанной с памятью, используя параметр xdebug.show_mem_delta в сочетании с xdebug.trace_format, установленным в 1, чтобы получить использование памяти в простом html.

Отметьте http://xdebug.org/docs/execution_trace и http://derickrethans.nl/xdebug-and-tracing-memory-usage.html, чтобы получить некоторые идеи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...