Ama*_*ari 5 mysql connection-pooling ruby-on-rails puma
我很难理解我必须做的数学运算,才能RAILS_MAX_THREADS根据我的基础设施找出正确的数字。
我使用多个容器来托管一份接受 HTTP 请求的 API 副本和一份运行 sidekiq(作业处理)的 API 副本。我正在使用的数据库的 max_connections 为 45。话虽如此,连接数应该是多少RAILS_MAX_THREADS?我用 9 表示RAILS_MAX_THREADSAND WEB_CONCURRENCY。我读了一些关于它的文章,但我还不能完全理解它。
即使您不使用 Heroku,Heroku 的关于 puma 尺码调整的文档也是最好的。
https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server
在他们说“dyno”的地方,您可以只阅读“主机”、“虚拟机”或“容器”来进行非 Heroku 部署。
如果您使用 9 forRAILS_MAX_THREADS 和 WEB_CONCURRENCY,并且您的 heroku 配置设置为以正常方式使用这些设置 - 那么每个主机将有 9 个 puma 工作线程运行 ( WEB_CONCURRENCY),每个工作线程将运行 9 个线程 ( RAILS_MAX_THREADS),总共9*9=81 个线程。
每个线程确实需要足够的数据库连接,因此您的数据库连接数已经超过 45 个,几乎增加了两倍。这仅适用于一个容器 - 如果您运行多个容器,每个容器都具有这些设置,则将 81 乘以容器数量 - 因此这对于您的数据库连接来说太多了!
因此,如果您无法更改最大数据库连接数,则这是一个硬限制,您需要减少数量。
否则,主要限制因素是每个容器中有多少可用 RAM 以及 vCPU 数量。WEB_CONCURRENCY理想情况下,如果您有足够的 RAM 来执行此操作,您至少应在容器 () 上运行与 vCPU 一样多的工作线程。Worker 占用大量 RAM。通常没有理由运行比 vCPU 更多的工作线程,因此 9 是否有意义或大于需要取决于您的基础设施。
每个工作进程 ( ) 有多少线程RAILS_MAX_THREADS是最佳的,具体取决于您的应用程序正在执行的操作,但根据经验,您可以从 5 个开始。通常,9 个线程可能比有用的多。
所以我会尝试RAILS_MAX_THREADS3-5。然后在不耗尽 RAM 的情况下尽可能多地使用 WEB_CONCURRENCY(要查看应用程序在负载下运行一段时间后将占用多少 RAM,您可能需要将其在负载下运行一段时间)。只要容器 * RAILS_MAX_THREADS * WEB_CONCURRENCY 小于数据库最大连接数——如果不是,则要么减少值,要么增加数据库最大连接数。
| 归档时间: |
|
| 查看次数: |
1253 次 |
| 最近记录: |