Отладка использования памяти в mod_php - PullRequest
2 голосов
/ 22 октября 2009

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

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

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

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

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

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

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

1 Ответ

2 голосов
/ 22 октября 2009

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

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

Отслеживание использования памяти в PHP, по-видимому, очень сложно. Похоже, нет способа найти таблицу символов или что-то в этом роде.

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

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

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