使用Puma,了解工作进程、线程和池大小

12
如果我有一台只有一个内核的服务器,适当的Puma工作进程、线程数和数据库池大小是多少?
一般的经验法则是什么?
1个回答

12

不是一个简单的答案。

两个主要的信息来源是:

  1. Puma github 代码库(作者的观点)
  2. Heroku 的网页(主要用户的观点)

不幸的是,它们不一致,这主要是因为 Heroku 有不同的部署指标和术语。

所以我最终遵循了 Puma 代码库的指南,其中包括:

  • 每个内核一个工作进程
  • 线程应与 RAM 可用性和应用程序相关确定
  • 线程数 = 连接池

因此,线程数主要是尝试和检查的操作。


2
“每个核心一个工作线程”的指导方针经常被提及,但实际上与Heroku的说法相反(他们将RAM作为工作线程的唯一限制因素,并建议将线程绑定到可用处理器)。是否已经有人对此做出最终结论?从直觉上讲,Heroku的版本更有道理。 - robomc
3
据我理解,Puma工作人员的真正优点是并行性,因为它们是独立的Ruby进程。如果你只有一个核心,那么没有理由使用多个工作人员,因为它们不能并行运行。尽管如此,即使在单核心环境中,Heroku可能也发现了使用多个工作人员的其他效率改进。 - Chris Hall
2
在单核环境中,我注意到多个进程会有很大的延迟。 - GorillaApe
1
昨天在Heroku免费的dyno上测试了我的应用程序。发送了100个请求,结果如下:1个线程,3个工作进程=>中等请求时间:1000毫秒。3个线程,1个工作进程=>中等请求时间:3400毫秒。因此,在Heroku上,至少在更便宜的dynos上,我会选择更多的工作进程和较少的线程。当然,最好的方法是对您的特定应用程序进行负载测试。 - Robban
3
根据我的个人经验,每核心一个工作进程还不够,建议每核心使用1.5或2个工作进程。否则,当Ruby进程在进行I/O或类似操作时被阻塞时,将浪费一些CPU资源。 - collimarco
显示剩余4条评论

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