我该如何确定在Heroku性能型dyno上运行的Puma工作进程和线程的正确数量?

13

我已经阅读了所有关于Heroku、Puma和dyno类型的文章,但是找不到一个直接的答案。

有提到过Puma worker的数量应该由CPU核数决定。但是我无法找到Heroku公开性能-M和性能-L dyno有多少个核心的信息。

在这篇文章中,Heroku 提出了一种方法: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server

我认为他们建议将线程设置为 1,并增加 Puma worker 的数量,直到开始看到 R14(内存)错误,然后回退。然后增加线程数量,直到 CPU 达到最大值,尽管我不认为 Heroku 报告 CPU 利用率。

是否有人能够提供指导?

(我还想决定是否使用一个性能-L或多个性能-M Dynos,但一旦弄清楚如何设置 worker 和线程,就会很清晰)


你最终解决了吗?我现在也遇到了完全相同的问题。已经运行了 heroku run "cat /proc/cpuinfo" --app yourappname(CPU 信息)、heroku run "cat /proc/meminfo" --app yourappname(内存信息)和 heroku run "top" --app yourappname(旧版 Linux 的 top),但无法进入实际的“工作” dynos。 - Ming Hsieh
2个回答

14
我目前制定的路线如下:
  1. heroku run "cat /proc/cpuinfo" --size performance-m --app yourapp
  2. heroku run "cat /proc/cpuinfo" --size performance-l --app yourapp
  3. 记录您所拥有的进程信息
  4. 搜索Intel处理器的型号类型、家族、型号、步骤编号,并查找此处理器模拟了多少个核心。
  5. 查看此文档
  6. 使用 standard-2X / standard-1X 进行一些小实验,以确定 PUMA_WORKER 值。
  7. 按以下方式进行计算:

(所需 dyno 类型的最大线程数)/(基准 dyno 支持的最大线程数)x(在基准 dyno 上进行实验的 ` PUMA_WORKER` 值)-(CPU 核心数量)

例如,如果我的 standard-2X dyno 上的 PUMA_WORKER 为 3,则我将开始测试 performance-m 上的 PUMA_WORKER 数为:

16384 / 512 * 3 - 4 = 92

您还应考虑您的应用程序使用了多少内存,并选择最低值。

编辑:早期回答是在 ps:exec 可用之前编写的。您可以阅读官方文档,了解如何 ssh 进入正在运行的 dyno(s)。相比之前,这应该更容易了。


0

目前我们在AWS生产环境中运行的应用程序(使用ECS)也面临着同样的问题,我们正在尝试定义以下内容之间的最佳匹配:

  • 每个实例的vCPU / RAM数量
  • 实例数量
  • 每个实例运行的puma_threads数量(每个实例都有一个单独的puma进程)

为了更好地了解我们的应用程序如何使用puma_threads池,我们进行了以下操作:

  • 将puma指标导出到CloudWatch(运行线程+积压),然后我们发现在大约15个并发线程时,积压开始增长。
  • 将其与vCPU(使用率)进行比较,我们发现我们的vCPU从未超过25%

结合这两个信息,我们决定采取上述措施。

最后,我想分享this article,我认为这篇文章非常有趣。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接