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 一次检索数千行的位置,并修复它。 我们不知道你有多少内存,你有什么代码。这个问题太宽泛了。您需要使用xdebug
或 blackfire
分析您的代码,以找到超出所有内存的位置。
【参考方案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 出现内存不足错误