0

我正进入(状态

ActiveRecord::ConnectionTimeoutError (could not obtain a database connection within 5 seconds (waited 5.000798 seconds). The max pool size is currently 1; consider increasing it.)

当我尝试使用池大小 1 运行 WEBrick(rails 服务器)时,并且池大小更大没有问题。

WEBrick 在什么上使用第一个连接,单线程应用程序的最佳池大小是多少?这是特定于 WEBrick 的问题,还是适用于任何其他服务器(如 Unicorn)?

Rails 版本是 3.2.13

更新。刚刚用独角兽验证了这一点,它适用于单连接。

4

1 回答 1

2

如果我没记错的话,Rails 会在启动时保留与数据库的连接,并使用连接池中剩余的可用连接来处理请求。即使您在请求的生命周期中从未接触过 ActiveRecord 对象,Rails 仍会尝试为每个请求从池中保留一个连接,或者会阻塞直到有一个可用,直到超时限制。

默认池大小为 5 个连接:1 个为 Rails 保留 + 4 个可用于请求。

Rails 这样做是为了维护应用程序中的线程安全。

如果您的应用程序是单线程的,并且一次只处理一个请求而不考虑并发性,那么池中的连接数应至少设置为 2。不过,我仍然建议使用默认值 5,这样您就有了一些喘息的空间,以防每个请求需要使用多个连接。

这不是 WEBrick 特有的。无论运行什么应用程序服务器,连接池限制对应用程序的影响都是相同的。

于 2013-04-02T21:18:07.537 回答