Allowed memory size of 536870912 bytes exhausted in Laravel
LaravelLaravel Problem Overview
In the same system, I can make call to db, and there is no problem, but in some case ( with the biggest table ), I get
> "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
I debugged the code and the problem is a basic query:
" SELECT partidascapturainfo.* FROM partidascapturainfo WHERE partidascapturainfo.partidascapturainfoid IS NOT NULL ORDER BY partidascapturainfoid asc LIMIT 0 , 10 "
When I run the query in a Mysql Client, query runs in 0.17s
I've already set memory_limit to 2048, restart nginx and my query only return 10 rows...
Here are my 10 rows:
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
Any Idea what's going on???
Laravel Solutions
Solution 1 - Laravel
You can try editing /etc/php5/fpm/php.ini:
; Old Limit
; memory_limit = 512M
; New Limit
memory_limit = 2048M
You may need to restart nginx
:
sudo systemctl restart nginx
You may also have an infinite loop somewhere. Can you post the code you're calling?
Solution 2 - Laravel
It is happened to me with laravel 5.1 on php-7 when I was running bunch of unitests.
The solution was - to change memory_limit in php.ini but it should be correct one. So you need one responsible for server, located there:
/etc/php/7.0/cli/php.ini
so you need a line with
memory_limit
After that you need to restart php service
sudo service php7.0-fpm restart
to check if it was changed successfully I used command line to run this:
php -i
the report contained following line
memory_limit => 2048M => 2048M
Now test cases are fine.
Solution 3 - Laravel
I realize there is an accepted answer, and apparently it was either the size of memory chosen or the infinite loop suggestion that solved the issue for the OP.
For me, I added an array to the config file earlier and made some other changes prior to running artisan and getting the out of memory error and no amount of increasing memory helped. What it turned out to be was a missing comma after the array I added to the config file.
I am adding this answer in hopes that it helps someone else figure out what might be causing out of memory error. I am using laravel 5.4 under MAMP.
Solution 4 - Laravel
Share the lines of code executed when you make this request. There might be an error in your code.
Also, you can change the memory limit in your php.ini file via the memory_limit
setting. Try doubling your memory to 64M. If this doesn't work you can try doubling it again, but I'd bet the problem is in your code.
ini_set('memory_limit', '64M');
Solution 5 - Laravel
This problem occurred to me when using nested try- catch and using the $ex->getPrevious() function for logging exception .mabye your code has endless loop. So you first need to check the code and increase the size of the memory if necessary
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 ***/
}
Solution 6 - Laravel
Edit the following two files (you may only have one of them):
sudo nano /etc/php/7.3/fpm/php.ini
sudo nano /etc/php/7.3/cli/php.ini
Change the memory limit, for example from 512M to 1024M:
memory_limit = 1024M
Restart nginx:
sudo systemctl restart nginx
Check the memory_limit
php -i | grep "memory_limit"
Run your software to check if the new memory_limit is sufficient.
If not, increase it again (and repeat the steps above). To 2048M, for instance:
memory_limit = 2048M
Solution 7 - Laravel
I got this error when I restored a database and didn't add the user account and privileges back in. Another site gave me an authentication error, so I didn't think to check that, but as soon as I added the user account back everything worked again!
Solution 8 - Laravel
For litespeed servers with lsphp*.* package.
Use following command to find out default set memory limit for PHP applications.
php -r "echo ini_get('memory_limit').PHP_EOL;"
To locate active php.ini file from CLI
php -i | grep php.ini
Example:
/usr/local/lsws/lsphp73/etc/php/7.3/litespeed/php.ini
To change php.ini default value to custom:
php_memory_limit=1024M #or what ever you want it set to
sed -i 's/memory_limit = .*/memory_limit = '${php_memory_limit}'/' /usr/local/lsws/lsphp73/etc/php/7.3/litespeed/php.ini
Dont forget to restart lsws with: systemctl restart lsws
Solution 9 - Laravel
I had this problem when trying to resize a CMYK jpeg using the Intervention / gd library. I had to increase the memory_limit.
Solution 10 - Laravel
Sometime limiting your data is also helpful, for example checkout the followings:
//This caused error:
print_r($request);
//This resolved issue:
print_r($request->all());
Solution 11 - Laravel
If you in the same story as me:
- Laradock or other Docker containers
- No errors
- No logs
- Laravel request eats our all your memory in docker and killed silently
- You even tried to debug your code with xDebug and nothing happened after Exception
The reason is xDebug 3.0
with develop
enabled, it prints detailed info about the exceptions and in the case of Laravel take a lot of memory, even 3GB not enough, it dies, without printing any info about it.
Just disable xDebug, at least develop, and it will be fine.
Solution 12 - Laravel
I suggest you check your Apache server virtual memory in MB and then set the memory limit.
because Server crash problem if your Apache server has 1024 Mb of virtual memory and set 2048 Mb.
> ini_set use in php code
ini_set('memory_limit', '512M');
Also you can change in php.ini:
memory_limit = 512M
Find the path location of php.ini using the command line in Linux or Windows: > php --ini
Solution 13 - Laravel
I had the same problem. No matter how much I was increasing memory_limit (even tried 4GB) I was getting the same error, until I figured out it was because of wrong database credentials setted up in .env
file
Solution 14 - Laravel
I had also been through that problem. in my case, I was adding the data to the array and passing the array to the same array which brings the problem of memory limits. Some of the things you need to consider:
-
Review our code, look if any loop is running infinity.
-
Reduce the unwanted column if you are retrieving the data from the database.
-
Maybe you can increase the memory limits in our XAMPP other any other software you are running.
Solution 15 - Laravel
While using Laravel on apache server there is another php.ini
/etc/php/7.2/apache2/php.ini
Modify the memory limit value in this file
memory_limit=1024M
and restart the apache server
sudo service apache2 restart
Solution 16 - Laravel
for xampp
it there is in xampp\php\php.ini
now mine new option in it looks as :
;Maximum amount of memory a script may consume
;http://php.net/memory-limit
memory_limit=2048M
;memory_limit=512M
Solution 17 - Laravel
- On a Mac, run the following in the terminal
php -r “echo ini_get(‘memory_limit’).PHP_EOL;”
This will tell you your current memory limit.
- Then, run
php -i | grep php.ini
This will show you where your php.ini file is.
- Open this file and increase the memory limit. For example, limitless is:
memory_limit = -1
- Run the first command again to test
php -r “echo ini_get(‘memory_limit’).PHP_EOL;”
- (optional) If it still doesn't work, go to your memory limits file. Mine was
/usr/local/etc/php/8.0/conf.d/php-memory-limits.ini
In here, change the memory_limit
Solution 18 - Laravel
Check that you are not calling @extends recursively. In my case I had
@extends('layouts.app')
in resources/views/layouts/app.blade.php
Solution 19 - Laravel
You can also get this error if you fail to include .htaccess or have a problem in it. The file should be something like this
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]