Допустимый размер памяти 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
Я также прошел через эту проблему. в моем случае я добавлял данные в массив и передавал массив в тот же массив, что порождает проблему ограничений памяти.
Некоторые вещи, которые вам нужно учитывать:
Просмотрите наш код, посмотрите, работает ли какой-либо цикл в бесконечности.
Уменьшите ненужный столбец, если вы извлекаете данные из базы данных.
Может быть, вы можете увеличить пределы памяти в нашем XAMPP для любого другого программного обеспечения, которое вы используете.