我对Unicorn,Sidekiq和DB Pool大小的理解是否正确?

我有Unicorn,Sidekiq和Postgres设置。

我试图了解正确的配置设置,以便我没有达到最大数据库连接限制。 在Opsworks中,m1.small Postgres RDS实例最多可以有121个连接。

我有一个db池大小为5。

考虑一下。 Sidekiq和Unicorn是它自己的过程。 因此, 每个进程的数据库池大小为5.如果我的理解错误,请纠正我。

如果我有5个独角兽进程’,那意味着5 * 5 = 25个数据库连接

现在这是我有点困惑的部分,因为Sidekiq是multithreading的。 如果Sidekiq的并发度为5.并且db池大小也设置为5.这是否意味着在给定时间内有25个潜在的数据库连接?

这意味着,对于一个实例,我可以有50个db连接?

在Unicorn中,每个进程都建立自己的连接池,因此,如果您的数据库池设置为5,并且您有5个Unicorn工作程序,则最多可以有25个连接。 但是,由于每个独角兽工作者一次只能处理一个连接,因此除非您的应用程序在内部使用线程,否则每个工作人员实际上只会使用一个数据库连接。

在Sidekiq中,池中的连接是跨线程共享的,因此每个工作者至少需要一个连接可用。 如果您的并发度为5,那么您的池需要至少为5。

池大小大于1意味着每个Unicorn工作者都可以访问它不能使用的连接,但它实际上不会打开连接,因此无关紧要。

除非您在应用程序代码中使用线程(并且它们不共享数据库连接),否则应用程序所需的实际连接总数为每个Sidekiq工作者一个加上每个Unicorn工作者一个。