使用Puma的工人,线程和池大小

san*_*ius 11 ruby pool worker puma

如果我有一个1核心的服务器,有多少puma worker,thread和什么数据库池大小合适?

一般大拇指在这里是什么?

tom*_*sop 11

不是一个简单的答案.

两个主要信息来源是:

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

不幸的是,它们之间的不一致主要是因为heroku具有不同的部署指标和术语.

所以我最终遵循美洲狮存储库指南说:

  • 每个核心一名工人
  • 与RAM可用性和应用程序相关的线程确定
  • 线程=连接池

所以线程数主要是尝试和检查操作.

  • 据我了解,Puma工人的真正好处是并行性,因为它们是独立的ruby过程.如果你只有1个核心,那么实际上没有理由使用超过1个工作者,因为它们不能并行运行.也就是说,即使在单核环境中,Heroku也可能发现了使用多个工作人员的其他一些效率提升. (3认同)
  • "每个核心的一个工人"指南被大量抛出,但它基本上与Heroku所说的相反(他们将RAM视为工人的唯一限制因素,并建议线程应与可用的处理器绑定).有没有人对此有最终决定权?Heroku的版本对我来说更直观. (2认同)
  • 在单核环境中,我注意到多个进程的大延迟. (2认同)
  • 以我的个人经验,每个核心1个工人是不够的:我建议每个核心1.5个或2个工人。否则,当Ruby进程在I / O或类似设备上被阻止时,您将浪费一些CPU。 (2认同)