Как отлаживать «Неустранимая ошибка: вне памяти (выделено XXX) (пытался выделить XXXXX байты)»?

Просматривая StackOverflow, я понял , что ошибки из памяти являются общей проблемой. Как было предложено другими, при некоторых обстоятельствах это может быть достигнуто за счет увеличения предела памяти в php.ini. Но часто это не решает проблему, поскольку в кодировке есть проблема.

Каковы наиболее распространенные источники этой ошибки? Как вы разрабатываете свой код, чтобы избежать этого? Как вы относитесь к отладке такой ошибки?

До сих пор я знаю как источники:

  • неопределенные петли
  • выбор большого количества db-данных в переменную (возможно, это помогает отключить vars после их использования, если это более одного?)

Да, конечно.

Вы должны получить скрипт /xxxxx/xxxxx.xxx и отсортировать информацию о работе, выполняемой в строке 22.
И уменьшите количество памяти.

Есть 2 решения

Если

  • на вашем сайте много трафика
  • ваш сервер используется для создания некоторого материала с интенсивной памятью (создания PDF / изображения и т. д.),

Тогда для сервера нормально работать, если на вашем сайте просто слишком много людей. Единственное решение – увеличить его. Для веб-сайта, который подсчитывает много посетителей в день, 550M находится между низкой и средней суммой.

Но если ваш сайт имеет лишь немного трафика, например, небольшой веб-сайт компании, то у вас может быть проблема. Проверьте, какие процессы есть в памяти – например, с помощью top или htop – и действуйте соответствующим образом.

Если это PHP, который выполняет слишком много ОЗУ, обычно такая ошибка вызвана бесконечным циклом или длинным, например извлечением большого количества данных из БД, созданием объекта с каждой из этих записей без освобождения памяти.