【问题标题】:How do I determine the right number of Puma workers and threads to run on a Heroku Performance dyno?如何确定在 Heroku Performance dyno 上运行的正确数量的 Puma 工作线程和线程?
【发布时间】:2017-03-15 09:06:13
【问题描述】:

我已阅读在 Heroku 上可以找到的所有关于 Puma 和 dyno 类型的文章,但我无法得到直接的答案。

我看到有人提到 Puma 工人的数量应该由核心数量决定。我在任何地方都找不到 Heroku 揭示性能-M 或性能-L 测功机有多少核心。

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

我认为他们建议将线程设置为 1 并增加 Puma 工作人员的数量,直到您开始看到 R14(内存)错误,然后退出。然后增加线程数,直到 CPU 用完为止,尽管我认为 Heroku 不会报告 CPU 利用率。

谁能提供指导?

(我也想决定是否应该使用一个性能-L 或多个性能-M dynos,但我认为一旦我弄清楚如何设置工作线程和线程就会清楚)

【问题讨论】:

  • 你最终弄清楚了吗?我现在有完全相同的问题。已经运行 heroku run "cat /proc/cpuinfo" --app yourappname (cpu info), heroku run "cat /proc/meminfo" --app yourappname (memory info), heroku run "top" --app yourappname (old linux top),但实际上无法进入 working dynos。

标签: ruby-on-rails multithreading heroku puma


【解决方案1】:

我目前想出的路线图是这样的:

  1. heroku run "cat /proc/cpuinfo" --size performance-m --app yourapp
  2. heroku run "cat /proc/cpuinfo" --size performance-l --app yourapp
  3. 写下你掌握的流程信息
  4. 谷歌搜索英特尔处理器的型号类型、系列、型号、步数,并查找该处理器具有或模拟的内核数量。
  5. 看看这个https://devcenter.heroku.com/articles/dynos#process-thread-limits
  6. standard-2X / standard-1X 做一些小实验以确定PUMA_WORKER 的值。
  7. 这样算算:

(Max Threads of your desired dyno type could support) / (Max Threads of baseline dyno could support) x (Your experiment `PUMA_WORKER` value on baseline dyno) - (Number of CPU core)

例如,如果我的standard-2X 测功机上的PUMA_WORKER 为3 作为基线,那么performance-m 上的PUMA_WORKER 数字我将开始测试它是:

16384 / 512 * 3 - 4 = 92

您还应该考虑您的应用消耗多少内存并选择最低的。

编辑:以前我的答案是在ps:exec 可用之前写的。您可以阅读the official document 并了解如何通过 ssh 进入运行的测功机。应该比以前容易多了。

【讨论】:

    【解决方案2】:

    目前在 AWS 生产环境中运行的应用程序面临同样的问题(我们正在使用 ECS),并试图定义以下两者之间的良好匹配:

    • 每个实例的 vCPU / Ram 数量
    • 实例数
    • 每个实例运行的 puma_thread 数(每个实例都有一个 puma 进程)

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

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

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

    最后我想分享this article,我觉得这个话题很有趣。

    【讨论】:

      猜你喜欢
      • 2015-01-05
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 2016-11-06
      相关资源
      最近更新 更多