ребята, есть несколько тем об этой ошибке и решает, хотя моя ситуация в том, что у меня есть 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, и другие крепления, которые я получаю. Может кто-нибудь объяснить мне, почему он подсчитывает этот путь или передает ссылку, где я могу больше узнать об этом.
С уважением
Я бы предпочел добавить это как комментарий к комментарию Халайема Аниса как ответ, но я пока не могу. Это скорее объяснение.
Когда ошибка говорит "Не удалось выделить X байтов", это в дополнение к существующему использованию памяти. Если ваш PHP-скрипт уже использует 200000000 байт памяти, и он пытается выделить 265556016 байт, то 265556016 + 200000000 будет 465556016, что больше, чем ограничение памяти 268435456.
Вам понадобится настроить Multirequest для создания меньшего количества запросов (я не знаю программного обеспечения, но на основе github он создает кучу запросов CURL.) Другой вариант - настроить систему на большее количество памяти для PHP. Это делается либо с помощью опции PHP.ini/ini_set memory_limit
или что-то, что ваш хост настраивает.
--php-ini
чтобы указать местоположение вашего пользовательского файла php.ini. Если ваш cron 10 * * * * /usr/bin/php -f /path/to/file.php
добавьте --php-ini /path/to/custom/php.ini
до конца
Вам нужно выделить больше памяти для сценария или для всей конфигурации 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
Таким образом, я повторяю во всех своих данных, но в нескольких случаях, и обычно вы получаете некоторую производительность и намного меньше использования памяти.
ini_set('memory_limit', '-1');
вершина этой функции. Проверьте настройки памяти в php.ini и проверьте код, почему используется такое количество памяти.