Неустранимая ошибка: допустимый объем памяти 134217728 байт исчерпан (попытался выделить 87 байт) - PullRequest
9 голосов
/ 02 июля 2011

При входе в мое веб-приложение выдается сообщение об ошибке:

Неустранимая ошибка: допустимый объем памяти 134217728 байт исчерпан (попытка выделить 87 байт) в /gt/2.ps.fo / home / hft / domains / console.fo.spalgo.com / public_html / cake / libs / model / datasources / dbo / dbo_mysql.php on line 775

Есть ли какое-то решение для решения этой проблемыпроблема?Почему я получаю эту ошибку?

Ответы [ 5 ]

9 голосов
/ 02 июля 2011

Звучит так, как будто вы выделили больше памяти, чем PHP позволит . Измените настройку memory_limit на своем сайте php.ini, как описано на связанной странице.

Другая возможность (менее вероятная) состоит в том, что вы достигли ограничения ресурса setrlimit(2) для своего пользователя или группы. Проверьте /etc/security/limits.conf на наличие ограничений, которые могут быть установлены для вашего веб-сервера, а также любых сценариев инициализации, запускающих серверную среду и среду интерпретатора PHP.

3 голосов
/ 02 июля 2011

Первый пример, который я нашел, выполнив поиск SO "PHP out of memory": this

1 голос
/ 14 марта 2017

Глядя на файл, который вызвал фатальное исключение (dbo_mysql.php), я предполагаю, что ваш вызов извлекает данные из базы данных.

Также, глядя на ограничение памяти, он показывает 134217728 байт, что128 МБ, поэтому я думаю, что независимо от того, что делает ваш вызов API, он пытается извлечь много данных, общая сумма которых превышает лимит, выделенный для сценария.
Например, если последний сценарий в стеке вызовов API должен был использовать 20MB для своих нужд, а затем устает извлекать данные из БД стоимостью 115MB, ваш сценарий будет пытаться выделить 135MB, что уже на 7MB больше лимита и, следовательно, вызывает Fatal Exception.

Итак, я вижу несколько вещей, которые нужно проверить / сделать:

  1. То, что вы не извлекаете ненужные данные или, другими словами, извлекаете только то, что вам нужно.
  2. Если выесли вам действительно нужны все эти данные, то
    • Либо увеличьте значение memory_limit под вашим php.ini файлом
      Con: Если ваши данные продолжают расти, возможно, вам придется обновлять этозначение для тОн только один сценарий и подвергает себя утечкам памяти или нехватке памяти.
    • Или я бы порекомендовал вам реализовать какую-то нумерацию страниц (которая позволит вам контролировать пределы памяти) и сделать ваше приложениеболее масштабируемый.
1 голос
/ 12 июля 2013
ini_set('memory_limit', '-1');
1 голос
/ 02 июля 2011

Попробуйте использовать echo вместо того, чтобы сначала сохранить то, что вы печатаете, в переменной.

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