Допустимый размер памяти 536870912 байт, израсходованный в Laravel

В той же системе я могу сделать вызов в db, и нет проблем, но в некоторых случаях (с самой большой таблицей) я получаю

"PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 32 bytes) in/home/forge/sximo.sp-marketing.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 311

Я отладил код, и проблема заключается в следующем запросе:

"  SELECT partidascapturainfo.* FROM partidascapturainfo    WHERE partidascapturainfo.partidascapturainfoid IS NOT NULL       ORDER BY partidascapturainfoid asc   LIMIT  0 , 10 "

Когда я запускаю запрос в Mysql Client, запрос выполняется за 0,17 с.

Я уже установил в memory_limit значение 2048, перезапустите nginx, и мой запрос вернет только 10 строк...

Вот мои 10 строк:

123044,42016,249,3762,2,,0
123045,42016,249,3761,2,,0
123046,42016,249,3764,1,,0
123047,42016,249,3765,,,0
123048,42016,249,3775,,,0
123049,42016,249,3771,3,,0
123050,42016,249,3772,3,,0
123051,42016,250,3844,HAY,,0
123052,42016,255,3852,,,0
123053,42017,249,3761,1,,0

Любая идея, что происходит???

Ответ 1

Вы можете попробовать отредактировать /etc/php5/fpm/php.ini:

; Old Limit
; memory_limit = 512M

; New Limit
memory_limit = 2048M

Возможно, вам придется перезапустить nginx

У вас также может быть бесконечный цикл. Можете ли вы опубликовать код, который вы вызываете?

Ответ 2

Это случилось со мной с laravel 5.1 на php-7, когда я запускал кучу унитатов.

Решением было - изменить memory_limit в php.ini, но он должен быть правильным. Поэтому вам нужен один ответственный за сервер, расположенный там:

/etc/php/7.0/cli/php.ini

поэтому вам нужна линия с

 memory_limit

После этого вам нужно перезапустить службу php

sudo service php7.0-fpm restart

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

 php -i

в отчете содержится следующая строка

memory_limit => 2048M => 2048M

Теперь тестовые случаи прекрасны.

Ответ 3

Я понимаю, что есть принятый ответ, и, по-видимому, это был либо размер выбранной памяти, либо предложение бесконечного цикла, которое решило проблему для ОП.

Для меня я добавил массив в конфигурационный файл раньше и сделал некоторые другие изменения до запуска artisan и получения ошибки из памяти, и увеличение объема памяти не помогло. То, что оказалось, было отсутствующей запятой после массива, который я добавил в файл конфигурации.

Я добавляю этот ответ в надежде, что он поможет кому-то понять, что может вызвать ошибку в памяти. Я использую laravel 5.4 под MAMP.

Ответ 4

Эта проблема возникла у меня при использовании вложенного улочка try- и использования функции $ex-> getPrevious() для регистрации исключения. Малый ваш код имеет бесконечный цикл. Поэтому вам сначала нужно проверить код и при необходимости увеличить размер памяти

 try {
        //get latest product data and latest stock from api
        $latestStocksInfo = Product::getLatestProductWithStockFromApi();
    } catch (\Exception $error) {
        try {
            $latestStocksInfo = Product::getLatestProductWithStockFromDb();
        } catch (\Exception $ex) {
            /*log exception */
            Log::channel('report')->error(['message'=>$ex->getMessage(),'file'=>$ex->getFile(),'line'=>$ex->getLine(),'Previous'=>$ex->getPrevious()]);///------------->>>>>>>> this problem when use 
            Log::channel('report')->error(['message'=>$ex->getMessage(),'file'=>$ex->getFile(),'line'=>$ex->getLine()]);///------------->>>>>>>> this code is ok 
        }
        Log::channel('report')->error(['message'=>$error->getMessage(),'file'=>$error->getFile(),'line'=>$error->getLine()]);

        /***log exception ***/
    }

Ответ 5

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

Ответ 6

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

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

ini_set('memory_limit', '64M');

Ответ 7

У меня такая же проблема. Независимо от того, сколько я увеличивал memory_limit (даже пробовал 4 ГБ), я получал ту же ошибку, пока не понял, что это связано с неправильными учетными данными базы данных, установленными в файле .env

Ответ 8

У меня была эта проблема при попытке изменить размер JPEG CMYK с помощью библиотеки Intervention/gd. Мне пришлось увеличить memory_limit.

Ответ 9

где находится /etc/php5/fpm/php.ini в проекте laravel???

Ответ 10

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

  1. Просмотрите наш код, посмотрите, работает ли какой-либо цикл в бесконечности.

  2. Уменьшите ненужный столбец, если вы извлекаете данные из базы данных.

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