symfony内存不足错误

Posted

技术标签:

【中文标题】symfony内存不足错误【英文标题】:Out of memory error in symfony 【发布时间】:2015-07-25 14:45:57 【问题描述】:

我目前正在开发 Symfony 项目 (const VERSION ='2.5.10'),我正在使用 xampp。 php版本是5.5.19。

我的问题是每次运行我的开发环境时都会出错:

OutOfMemoryException: 错误: C:\xampp\htdocs\Editracker\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\Profiler\FileProfilerStorage.php 中允许的内存大小为 1073741824 字节已用尽(尝试分配 3358976 字节)第 153 行

每次我刷新页面时,它都会给出不同的内存大小。我也认为这也是我的开发环境需要很长时间才能刷新页面的原因。

感谢您的帮助。

php.ini

memory_limit='256M'

我试图增加我的内存限制,但它仍然给出关于内存限制的错误

【问题讨论】:

错误信息非常明显。您的代码占用了太多 RAM,您需要找出导致 OOM 的部分。 Allowed memory size of 33554432 bytes exhausted (tried to allocate 43148176 bytes) in php的可能重复 @Michael:我已经尝试过了,但它仍然给我一个关于内存限制的错误。我该怎么办? 找到您尝试通过 ORM 一次检索数千行的位置,并修复它。 我们不知道你有多少内存,你有什么代码。这个问题太宽泛了。您需要使用 xdebugblackfire 分析您的代码,以找到超出所有内存的位置。 【参考方案1】:

Symfony 中最急切的组件是分析器。如果您在某些特定操作中不需要分析器,您可以通过代码禁用它:

if ($this->container->has('profiler'))

    $this->container->get('profiler')->disable();

你也可以在config中设置全局参数:

framework:
    profiler:
        collect: false

【讨论】:

我应该在哪里设置它?是在 config.yml 中还是在 config_dev.yml 中?对不起,我真的很困惑。 您的 config.dev 导入 config.yml。所以一切都一样。但我建议你将它放在你的 dev-config 中。 我试了一下,我得到一个错误:“[Symfony\Component\Config\Definition\Exception\InvalidConfigurationException] “框架”下的无法识别的选项“收集” 您忘记将分析器放在框架和收​​集之间的中间。我认为凭借您的技能,您应该为您的项目选择另一个框架(或者可能是 CMS)。 Symfony 对您来说非常复杂。 我按照你的例子,那么可能是什么问题?关于更改我正在使用的框架,我不能,因为我只是固有这个项目并且需要增强它的功能。我刚刚开始学习这个框架。【参考方案2】:

您要么禁用 symfony 分析器(据我所知,我认为这不是您想要的),要么在 php.ini 中使用 -1 将限制设置为无限制并重新启动 apache。

memory_limit = -1

【讨论】:

我尝试让内存不足错误消失,但用这个替换“FatalErrorException:错误:C:\xampp\htdocs\Editracker\vendor\symfony\symfony 中超过 30 秒的最大执行时间\src\Symfony\Component\HttpKernel\DataCollector\LoggerDataCollector.php 第 101 行“ 也试试这个:max_execution_time = 0 如果它不能解决它,那么您最好尝试在您的应用程序中找到实际的瓶颈。你可能有更大的问题。 也许,我真的需要。无论如何,我试图打开探查器,我发现查询一直在重复。坚果那么我该如何解决呢?我只是继承了这个项目。【参考方案3】:

我通过安装 XDebug 解决了 Twig 调试中的内存不足错误。

因为 Twig 在内部使用 PHP var_dump 函数,所以安装 XDebug 是个好主意,因为它将数组和对象的 var_dump() 输出限制为 3 级深度,正如我们在 documentation 上看到的那样。

感谢@peezi。

【讨论】:

【参考方案4】:

如果仅在 Symfony 开发环境下达到内存限制,我建议将以下内容添加到 web/app_dev.php

ini_set('memory_limit', '-1');

通过这种方式,您可以使用合理的内存量继续测试生产。通过 php.ini 修改整个环境可能会隐藏错误。

【讨论】:

真的是无限sensible amount of memory 在不了解系统及其内存需求的情况下,这是一个比在 php.ini 中设置内存限制更好的地方。在 app_dev 中更改它只会影响 dev 版本代码的运行,将其放在 php.ini 中意味着主机上的所有项目都受制于无限内存。在测试项目的实时版本时,您不要忘记将 php.ini 改回来。【参考方案5】:

即使迟到了,最近我也遇到了关于Out of Memory 的问题,只是用 Symfony 3.4 访问 app.php 文件。原来,当你把SELinux设置为enforcing时,即使你将项目内var目录的权限设置为777,它也无法在上面写。如果您按照官方文档中关于如何在生产中部署的步骤进行操作,它将返回响应代码 500 并在 Web 服务器的错误日志中仅写入 PHP 已耗尽内存限制。

我不是 SELinux 专家,但我可以解决此问题的唯一方法是禁用 SELinux,但版本 /etc/selinux/config 文件设置 SELINUX=disabled 并重新启动操作系统。

同样,SELinux 存在是有原因的,使用 Symfony 的 var 子文件夹不容易找到正确的配置,并且如果不考虑禁用 SELinux 就很难解决这个问题。

【讨论】:

【参考方案6】:

这可能会有所帮助:

php -d memory_limit=-1 /usr/local/bin/composer require ggergo/sqlindexhintbundle 

【讨论】:

以上是关于symfony内存不足错误的主要内容,如果未能解决你的问题,请参考以下文章

ConnectionQueueStatsProvider 出现内存不足错误

Eclipse 堆空间(内存不足错误)

Excel表单对象限制?内存不足编译错误

独立 matlab 应用程序的“内存不足”错误 - 内存碎片

使用 Firebase 时出现内存不足错误

系统错误8:存储空间不足,无法处理此命令.怎么办