2013-04-02 99 views
0

我越來越Rails的連接池大小的WEBrick

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(軌道服務器),並具有較高的池大小沒有問題。

什麼是WEBrick使用第一個連接,什麼是單線程應用程序的最佳池大小?這是一個WEBrick特定的問題,還是適用於任何其他服務器(如獨角獸)?

Rails版本是3.2.13

更新。只用獨角獸驗證過,單連接就可以正常工作。

+0

您是否試圖在生產環境中使用WEBrick? – Catfish

+0

絕對不是,這就是爲什麼問題的第二部分。 – UncleGene

回答

2

如果我沒有記錯,Rails在啓動時會保留與數據庫的連接,並使用連接池中可用的其餘連接來處理請求。即使您在請求的整個過程中都不會碰到ActiveRecord對象,Rails仍然會嘗試爲每個請求保留池中的一個連接,或者會阻塞,直到有一個連接可用,直到超時限制爲止。

默認池大小爲5個連接:1爲Rails + 4保留可用於請求。

Rails這樣做是爲了在應用程序中保持線程安全。

如果您的應用程序是單線程的並且一次只處理一個請求而不考慮併發性,那麼池中的連接數應該設置爲2,絕對最小值。儘管如此,我仍然建議默認值爲5,以便在每個請求需要使用多個連接的情況下有一些喘息空間。

這不是特定於WEBrick。無論應用程序服務器在運行什麼,連接池限制都會影響應用程序。

+0

我很確定你是對的。控制檯/測試通過單一連接成功運行,並且我確認獨角獸也很好 – UncleGene