1

運行Sidekiq幾個小時後,我看到一堆作業失敗,出現Mysql2::Error: This connection is in use by: #<Celluloid::Thread:0x0000000d1b56e0 sleep>。似乎Sidekiq線程在MySQL連接池上存在某種衝突。如何防止「Mysql2 ::錯誤:此連接正在使用中」與Sidekiq

concurrency設置爲sidekiq.yml中的默認值25,並且database.yml中的池爲28。沒有長時間的查詢,標準查找器調用發生異常,沒有什麼奇怪的。

如何防止此錯誤以確保作業順利運行?

+0

你在使用什麼服務器?獨角獸?這是發生在開發還是生產上? –

+0

這是一個獨立的Sidekiq處理器服務器。是的,生產。 – mahemoff

+0

你是否只爲這個工人使用這個數據庫?因爲如果你在另一個進程中使用相同的數據庫,你需要看看你的數據庫有多少連接 –

回答

0

您的問題是由於sidekiq正在獲取到您的數據庫的所有連接,同時rails應用程序也在請求連接。

你有25個sidekiq工作者,但你有多少rails服務器?

例如如果你有獨角獸運行4名童工,你需要29個插槽(至少)

+0

database.yml池變量反映每個進程的連接,所以每個獨角獸在這裏也有28個連接。 (實際上他們只需要1個,但實際上這並不是問題,因爲他們不使用更多而且活不了多久。)由於Unicorns沒有任何數據庫問題,這不是因爲與他們競爭。 (他們也在不同的機器上。) – mahemoff

+0

但他們共享相同的數據庫,它們在哪臺機器上並不重要,並且池不是每個進程都是按照DB –

+0

假設我有4個獨角獸。這意味着實際上(最多)125個連接。不是28. – mahemoff

0

在我們的情況下,更多的細節,我們有很多這樣的錯誤在一個特定的工作器類型。我們確定我們在這些工作人員中運行的其中一個作業中使用了Timeout.timeout()調用。我們刪除了這些電話,之後這些錯誤就消失了。有關Timeout.timeout()調用爲什麼很危險的一些參考信息,請參閱herehere

相關問題