Допустимый объем памяти 268435456 байт исчерпан (попытался выделить 265556016 байт)

0

ребята, есть несколько тем об этой ошибке и решает, хотя моя ситуация в том, что у меня есть cronjob, что делает некоторые запросы обновления в базе данных с использованием запросов с несколькими запросами. Я настроен на получение сообщений об ошибках, и я получаю около 200 в день из-за этой проблемы с памятью. Они связаны с:

system/application/libraries/MultiRequest/Handler.php. On line 132 :

while(CURLM_CALL_MULTI_PERFORM === curl_multi_exec($mcurlHandle, $activeThreads)) {

а также для:

system/application/libraries/MultiRequest/Request.php. On line 187 :

$responseData = curl_multi_getcontent($curlHandle);

Я ничего не понимаю:

268435456 больше, чем 265556016, а также 268435456, чем 265553811, и другие крепления, которые я получаю. Может кто-нибудь объяснить мне, почему он подсчитывает этот путь или передает ссылку, где я могу больше узнать об этом.

С уважением

Показать ещё 1 комментарий
Теги:
curl
codeigniter
cron

2 ответа

2
Лучший ответ

Я бы предпочел добавить это как комментарий к комментарию Халайема Аниса как ответ, но я пока не могу. Это скорее объяснение.

Когда ошибка говорит "Не удалось выделить X байтов", это в дополнение к существующему использованию памяти. Если ваш PHP-скрипт уже использует 200000000 байт памяти, и он пытается выделить 265556016 байт, то 265556016 + 200000000 будет 465556016, что больше, чем ограничение памяти 268435456.

Вам понадобится настроить Multirequest для создания меньшего количества запросов (я не знаю программного обеспечения, но на основе github он создает кучу запросов CURL.) Другой вариант - настроить систему на большее количество памяти для PHP. Это делается либо с помощью опции PHP.ini/ini_set memory_limit или что-то, что ваш хост настраивает.

  • 0
    Таким образом, он говорит мне, что существующему хранилищу, которое использует PHP, он пытается выделить, например, больше 265556016. И если у меня есть memory_limit, установленный на 2 ГБ и уже использовавший 1 ГБ, он не может выделить. Я прав?
  • 0
    Я хотел бы убедиться, что ваш cron получает этот memory_limit, поскольку ошибка предполагает, что он только на 256 МБ. Обычно задания cron выполняются на другом php.ini (/etc/php/cgi/php.ini или аналогичном), поэтому вам может потребоваться использовать флаг --php-ini чтобы указать местоположение вашего пользовательского файла php.ini. Если ваш cron 10 * * * * /usr/bin/php -f /path/to/file.php добавьте --php-ini /path/to/custom/php.ini до конца
Показать ещё 1 комментарий
0

Вам нужно выделить больше памяти для сценария или для всей конфигурации php, вы можете сделать это в /etc/php5/cli/php.ini, изменив memory_limit = 256 на memory_limit = -1 использовать всю memory_limit = -1 у вас память необходимо. Или вы можете использовать в своем скрипте ini_set('memory_limit', '512M');

У PHP нет (пока) очень интеллектуального garbage-colector и garbage-colector вся память освобождается, когда скрипт закончен, как правило, я делаю skip, count типы скриптов и из bash Я выполняю свои скрипты.

skip=0
count=0
while [ ! exiting_clause ]
do
   php script.php --skip="$skip" --count="$count"
   skip=$(($skip+$count))
done

Таким образом, я повторяю во всех своих данных, но в нескольких случаях, и обычно вы получаете некоторую производительность и намного меньше использования памяти.

  • 0
    спасибо за ответ, я знаю как это исправить. Дело в том, что я не знаю суть проблемы: почему, если у меня ограничение памяти до 2 ГБ и я попытался использовать 1,91 ГБ, у меня возникла эта ошибка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню