Отладка использования памяти в mod_php

У меня есть обработчик запросов, запущенный в apache / mod_php, который иногда расширяется за пределы максимально допустимого использования памяти (т. Е. Определение memory_limit в php.ini).

Обработка этого запроса вызывает proc_open () для запуска внешних команд. Используется ли использование памяти этими командами «против» использования памяти запросов?

Помимо этого, каковы предпочтительные способы анализа и исправления использования памяти скриптов, работающих под mod_php? Вся информация, которую я обнаружил в области использования памяти php, выглядит следующим образом:

  • «Измените php.ini и поднимите ограничение на память!»
  • «Отредактируйте конфигурацию apache и установите максимальные запросы на одного ребенка на меньшее число!»

Очевидно, что любой из них может отрицательно повлиять на производительность и стабильность. Как я могу анализировать и исправлять проблему, а не помогать ей?

Apache регистрирует ошибку как:

PHP Неустранимая ошибка: Допустимый размер памяти X байт исчерпан (попытался выделить Y байтов) в foo.php в строке Z

Solutions Collecting From Web of "Отладка использования памяти в mod_php"

Я задал аналогичный вопрос по управлению памятью PHP: Диагностика утечек памяти – Допустимый размер памяти из # байта исчерпан

Я вполне уверен, что запуск внешних программ от exec () или proc_open () НЕ учитывает ограничение памяти php.

Отслеживание использования памяти в PHP, по-видимому, очень сложно. Кажется, что нет способа поиска таблицы символов или чего-либо подобного.

PHP имеет пару функций управления памятью, таких как memory_get_usage() и memory_get_peak_usage() , которые могут извлекать общий объем памяти, используемый в любой заданной точке вашего скрипта. Вы можете написать свой собственный сценарий отслеживания и разместить его в режиме ad hoc в ключевых точках, чтобы найти хоггеров памяти.

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