我已经阅读了Heroku关于Puma和dyno类型的所有文章,我无法得到直接答案。
我看到一些人提到Puma工人的数量应该由核心数决定。我无法找到Heroku显示性能-M或性能-L dyno具有多少核心的任何地方。
在这篇文章中,Heroku暗示了一种方法: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server
我认为他们建议将线程设置为1并增加Puma工作者的数量,直到您开始看到R14(内存)错误,然后退出。然后增加线程数,直到CPU最大化,但我不认为Heroku报告CPU利用率。
任何人都可以提供指导吗?
(我还想决定是否应该使用一个性能-L或多个性能-M dynos,但我认为一旦我弄清楚如何设置工人和线程就会很清楚)
答案 0 :(得分:9)
我目前想出的路线图如下:
heroku run "cat /proc/cpuinfo" --size performance-m --app yourapp
heroku run "cat /proc/cpuinfo" --size performance-l --app yourapp
standard-2X
/ standard-1X
进行一些小型实验,以确定PUMA_WORKER
值。
(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)
例如,如果我的PUMA_WORKER
dyno上的standard-2X
为3,那么PUMA_WORKER
上的performance-m
号码我会开始测试它:
16384/512 * 3 - 4 = 92
您还应该考虑应用消耗多少内存并选择最低内存。
编辑:以前我的答案是在ps:exec
可用之前编写的。你可以阅读the official document并学习如何运行dyno(s)。它应该比以前容易得多。
答案 1 :(得分:0)
目前在 AWS 生产中运行的应用程序面临同样的问题(我们正在使用 ECS),并试图定义两者之间的良好匹配:
为了更好地了解我们的应用程序如何使用 puma_threads 池,我们执行了以下操作:
结合使用这两个信息,我们决定采取上述行动。
最后我想分享一下this article,我发现这个话题很有趣。