【问题标题】:Heroku Memory Limit PHPHeroku 内存限制 PHP
【发布时间】:2018-08-10 14:31:20
【问题描述】:

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

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

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

【问题讨论】:

  • Composer 在命令行界面上运行,因此您不可能有 10 个并发用户都在运行 composer 命令。通常,所有需要大量内存的任务都可以编写为命令行任务,以在异步队列中或按计划运行,以确保您不会同时运行许多并发的内存密集型任务。
  • “128MB 对于大多数 PHP 应用程序来说应该足够了” - 我认为“大多数 PHP 应用程序”不会生成 PDF 或处理大型数据库导出。
  • @SeanBright 我认为使用 PHP 生成 PDF 文件很常见。例如,想想发票。
  • @Chrisissorry 我没有证据支持这一点,但我的直觉告诉我,“大多数 PHP 应用程序” 都是简单的 CRUD 应用程序。无论哪种方式,这都不能回答您的问题。

标签: php heroku


【解决方案1】:

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

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

您关于 composer 使用 1.5GB 的示例很有趣,但值得牢记的是,依赖解析和运行构建步骤(由 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 的类似配置选项。

【讨论】:

    【解决方案2】:

    要在@xavriley 的答案上加起来,如果您没有Procfile,因为您只是使用git push heroku master 运行部署,您需要在您的根目录 中创建一个。

    创建一个名为“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 正在运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2014-02-06
      相关资源
      最近更新 更多