在同一系统中,我可以调用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客户端中运行查询时,查询以0.17s
运行我已经将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
任何想法发生了什么?
答案 0 :(得分:36)
您可以尝试编辑/etc/php5/fpm/php.ini:
timestamp
您可能需要重新启动nginx
你可能在某处也有无限循环。你可以发布你正在调用的代码吗?
答案 1 :(得分:14)
当我运行一堆unitests时,我发现在php-7上有laravel 5.1。
解决方法是 - 更改php.ini中的memory_limit,但它应该是正确的。所以你需要一个负责服务器的人,位于那里:
ERROR: no language specified
SQL state: 42P13
所以你需要一行
/etc/php/7.0/cli/php.ini
之后你需要重启php服务
memory_limit
检查它是否成功更改我使用命令行来运行它:
sudo service php7.0-fpm restart
报告包含以下行
php -i
现在测试用例很好。
答案 2 :(得分:2)
我意识到有一个已接受的答案,显然它是选择的内存大小或无限循环建议解决了OP的问题。
对我来说,我之前在配置文件中添加了一个数组,并在运行artisan之前进行了一些其他更改,并且出现了内存不足错误,并且没有增加内存量。结果是我添加到配置文件中的数组之后缺少逗号。
我正在添加这个答案,希望能帮助其他人找出可能导致内存不足错误的原因。我在MAMP下使用laravel 5.4。
答案 3 :(得分:1)
我恢复数据库并且没有重新添加用户帐户和权限时出现此错误。另一个网站给了我一个身份验证错误,所以我没想到要检查,但是很快当我添加用户帐户时,一切都恢复了!
答案 4 :(得分:1)
当使用嵌套的try-catch并使用$ ex-> getPrevious()函数记录异常时,我遇到了这个问题.mabye你的代码有无限循环。因此,您首先需要检查代码并在必要时增加内存大小
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 :(得分:1)
我建议您以 MB 为单位检查您的 Apache 服务器虚拟内存,然后设置内存限制。
因为如果您的 Apache 服务器有 1024 Mb 的虚拟内存并设置为 2048 Mb,则会出现服务器崩溃问题。
<块引用>ini_set 在 php 代码中的使用
ini_set('memory_limit', '512M');
您也可以在 php.ini 中更改:
memory_limit = 512M
在 Linux 或 Windows 中使用命令行查找 php.ini 的路径位置:
<块引用>php --ini
答案 6 :(得分:0)
分享发出此请求时执行的代码行。您的代码可能存在错误。
此外,您可以通过memory_limit
设置更改php.ini文件中的内存限制。尝试将你的记忆加倍到64M。如果这不起作用,您可以尝试再次加倍,但我打赌问题在您的代码中。
ini_set('memory_limit', '64M');
答案 7 :(得分:0)
编辑以下两个文件(您可能只有其中一个):
sudo nano /etc/php/7.3/fpm/php.ini
sudo nano /etc/php/7.3/cli/php.ini
更改内存限制,例如从 512M 更改为 1024M:
memory_limit = 1024M
重启nginx:
sudo systemctl restart nginx
检查内存限制
php -i | grep "memory_limit"
运行您的软件以检查新的 memory_limit 是否足够。
如果没有,再次增加(并重复上述步骤)。以2048M为例:
memory_limit = 2048M
答案 8 :(得分:0)
如果你和我在同一个故事里:
原因是 xDebug 3.0
启用了 develop
,它打印有关异常的详细信息,在 Laravel 的情况下占用大量内存,即使 3GB 也不够,它死了,不打印任何信息关于它。
只要禁用 xDebug,至少开发,就可以了。
答案 9 :(得分:0)
对于带有 lsphp*.* 包的 litespeed 服务器。
使用以下命令找出 PHP 应用程序的默认设置内存限制。
php -r "echo ini_get('memory_limit').PHP_EOL;"
从 CLI 中定位活动的 php.ini 文件
php -i | grep php.ini
示例:
/usr/local/lsws/lsphp73/etc/php/7.3/litespeed/php.ini
要将 php.ini 默认值更改为自定义:
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
不要忘记使用以下命令重新启动 lsws:systemctl restart lsws
答案 10 :(得分:0)
对于xampp
,它在xampp\php\php.ini
中
现在在其中挖掘新选项的样子:
;Maximum amount of memory a script may consume
;http://php.net/memory-limit
memory_limit=2048M
;memory_limit=512M
答案 11 :(得分:0)
有时限制数据也很有用,例如,检查以下内容:
//This caused error:
print_r($request);
//This resolved issue:
print_r($request->all());
答案 12 :(得分:0)
在apache服务器上使用Laravel时,还有另一个php.ini
/etc/php/7.2/apache2/php.ini
修改此文件中的内存限制值
memory_limit=1024M
并重新启动apache服务器
sudo service apache2 restart
答案 13 :(得分:0)
在尝试使用Intervention / gd库调整CMYK jpeg大小时遇到了这个问题。我不得不增加memory_limit。
答案 14 :(得分:0)
我遇到了同样的问题。无论我增加了多少memory_limit(甚至试过4GB)我都得到了同样的错误,直到我发现它是因为btListView
文件中设置错误的数据库凭据
答案 15 :(得分:-1)
如果您未包含.htaccess或存在问题,也可能会出现此错误。该文件应该是这样的
<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]
答案 16 :(得分:-1)
我也经历过这个问题。就我而言,我是将数据添加到数组,然后将数组传递给同一数组,这带来了内存限制的问题。 您需要考虑的一些事情:
查看我们的代码,看看是否有任何循环在无限远地运行。
如果要从数据库中检索数据,请减少不需要的列。
也许您可以在XAMPP和其他正在运行的任何其他软件中增加内存限制。