Laravel中允许的内存大小为536870912字节

时间:2016-01-18 21:36:58

标签: 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客户端中运行查询时,查询以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

任何想法发生了什么?

17 个答案:

答案 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

Php ini file location find

Change in Php.ini Memory Limit Settings on Ubuntu

答案 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)

如果你和我在同一个故事里:

  • Laradock 或其他 Docker 容器
  • 没有错误
  • 没有日志
  • Laravel 请求吞噬了我们在 docker 中的所有记忆并无声无息地杀死了
  • 您甚至尝试使用 xDebug 调试您的代码,但在 Exception 之后什么也没有发生

原因是 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)

我也经历过这个问题。就我而言,我是将数据添加到数组,然后将数组传递给同一数组,这带来了内存限制的问题。 您需要考虑的一些事情:

  1. 查看我们的代码,看看是否有任何循环在无限远地运行。

  2. 如果要从数据库中检索数据,请减少不需要的列。

  3. 也许您可以在XAMPP和其他正在运行的任何其他软件中增加内存限制。