This article指出对于大多数PHP应用程序128MB应该足够。我认为这是一个大胆的声明,着眼于composer,它在运行时将内存限制增加到1.5GB。
特别是,在生成PDF或处理大型数据库导出时,我们会遇到问题。我想我错过了一些最佳实践。我们应该如何在Heroku上处理内存密集型任务?
实现此目标的一种方法可能是编写.user.ini
来增加内存限制。但是我想这被认为是不好的做法。
答案 0 :(得分:1)
(披露-我在Heroku支持团队工作)
Heroku是一个可处理各种应用程序的平台-他们需要在最大效率(对于利用大量并发性的应用程序)和足够的空间处理常规处理任务之间取得平衡。这意味着根据那里的PHP团队的经验选择了128Mb。 (请参阅https://devcenter.heroku.com/articles/php-concurrency#determining-a-suitable-memory-limit)
您关于使用1.5GB的composer的示例很有趣,但是值得牢记的是,诸如依赖项解析和运行构建步骤(Composer处理)之类的任务与服务于Web请求的配置文件完全不同。如果您要进行诸如处理PDF之类的密集工作,请ideally this should be handed off to a background process保持请求尽可能轻。任何后台排队系统都可以使用此功能,但这是一个示例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的类似配置选项。
答案 1 :(得分:0)
要加上@xavriley的答案,以防因仅使用git push heroku master
运行部署而没有Procfile的情况,您需要在根目录中创建一个 >。
创建一个名为“ Procfile”的文件,其中包含以下内容:
web: vendor/bin/heroku-php-apache2 -F fpm_custom.conf
fpm_custom.conf
文件在与Procfile相同的路径中的位置。
fpm_custom.conf
文件应包含所需的memory_size:
php_value[memory_limit] = 256M
一旦创建,提交,推送并再次运行git push heroku master
文件,部署日志应显示新的Procfile正在运行。