Sylius生产环境中的致命内存错误

时间:2016-02-21 13:59:15

标签: symfony sylius

尝试在生产环境中访问我的Sylius网站,但我在内存错误中运行:

  

在stderr中发送的FastCGI:" PHP消息:PHP致命错误: directoryname /app/bootstrap.php.cache中允许的内存大小为134217728字节耗尽(试图分配72个字节)在第2798行"

我发现我可以通过设置AppKernel(' prod',true)来绕过这个问题,但我认为这是不好的做法。

有人遇到过类似的问题吗?

1 个答案:

答案 0 :(得分:0)

可能有多种原因,因为128MB的RAM并没有那么多。

1。缓存未预热

如果您的缓存未预热,并且应用程序需要生成所有文件,则在第一次请求时会占用大量RAM。

大多数情况下,在生产模式下不应该是这种情况,如果您运行composer install或使用在部署期间调用> php app\console cache:clear的某种部署机制(capistrano,部署者),因为这也会引发缓存。

尝试在服务器上手动运行composer install,因为这应该在构建自动加载文件后生成缓存。

2。 GD图像在尺寸较大(不是尺寸)的图像上调整大小

如果您使用GD调整图像大小,它将始终解压缩图像。这意味着jpeg图像为3000x3000,大小为1KB,其中每个像素为#fff需要大约35-54MB或RAM

(3000 x 3000 x 4(rgba)) / 1024^2 = 34.3MB

添加一些处理要求,它可以轻松达到128MB以上。此外,人们倾向于上传尺寸高达10k的图像。

  

解决方案:切换到imagick / gmagick或极大地增加RAM

3。你的app逻辑确实消耗了那么多RAM

  • 描述您的代码,查看使用了多少内存
  • 查看您是否未加载/构建数千个对象
  • 只需简单地将RAM增加到256/512并看到它有帮助

4。由于

,你隐藏了无限循环
  • 旧会话数据 - 清除会话
  • prod和dev机器(或配置文件)上的配置差异