首页 > 解决方案 > Heroku 内存限制 PHP

问题描述

这篇关于 Heroku 的文章指出,对于大多数 PHP 应用程序来说,128MB 应该足够了。我认为这是对composer的大胆声明,它在运行时将内存限制增加到 1.5GB。

具体来说,我们在生成 PDF 或处理大型数据库导出时会遇到问题。我想我在这里错过了一些最佳实践。我们应该如何处理 Heroku 上的内存密集型任务?

实现此目的的一种方法可能是编写 a.user.ini以增加内存限制。但我想这被认为是不好的做法。

标签: phpheroku

解决方案


(披露——我在 Heroku 支持团队工作)

Heroku 是一个处理各种应用程序的平台——它们需要在最大效率(对于利用大量并发性的应用程序)和为常见处理任务提供足够空间之间取得平衡。这意味着根据那里的 PHP 团队的经验选择了 128Mb。(见https://devcenter.heroku.com/articles/php-concurrency#determining-a-suitable-memory-limit

您关于 composer 使用 1.5GB 的示例很有趣,但值得记住的是,依赖解析和运行构建步骤(由 Composer 处理)之类的任务与服务 Web 请求有完全不同的配置文件。如果您正在做一些密集的事情,比如处理 PDF,理想情况下,这应该交给后台进程,以使请求尽可能轻松。任何后台排队系统都适用于此,但这里有一个示例https://devcenter.heroku.com/articles/php-workers

也就是说,一种尺寸绝对不适合所有尺寸,如果需要,完全有可能从默认值进行更改。

有很多选项可以做到这一点,其中大部分都在这里描述:https ://devcenter.heroku.com/articles/php-concurrency#tuning-concurrency-using-memory_limit

文件是一种.user.ini选择,但是这可以在每个目录的基础上生效,这可能会在与团队合作时造成一些混乱。

您还可以使用自定义配置文件在 PHP-FPM 级别进行配置,其内容如下:

php_value[memory_limit] = 64M

要使这些设置生效,您需要在Procfile命令中使用 -F 选项以便加载配置:

web: vendor/bin/heroku-php-apache2 -F fpm_custom.conf

参考文章中描述了 Nginx 和 HHVM 的类似配置选项。


推荐阅读