[英]Ruby on Rails & Heroku - “Too many connections for role”
我在Heroku的業余愛好基礎計划上運行Rails應用程序,由於某種原因,每當我嘗試連接到生產數據庫時,都會不斷收到臭名昭著的“角色連接過多”錯誤。 這意味着自動備份會不斷失敗,並且耙任務將由於拒絕連接而無法運行。
每次我運行heroku pg:info
都會顯示20/20連接。 如果我運行heroku pg:killall
則所有連接都將被殺死,並顯示0/20,直到我重新啟動所有測功機,然后立即恢復為20/20。
我設法通過終止所有連接並重新啟動服務器以觸發連接泄漏來運行heroku pg:psql
。 運行SELECT * FROM pg_stat_activity
顯示許多空閑的“ SELECT 1”查詢,但不會顯示它們來自何處。 這是典型的行,僅限於application_name,client_addr,waiting,state和query:
bin/rails | 10.14.19.163 | f | idle | SELECT 1
現在,假設x20彼此之間以毫秒為單位開始。 暫存應用程序未顯示這些症狀,並且始終保持在1/20左右的連接數。
這一切都是在從階段到生產的相當大但普通的部署之后開始的(基本上只是添加一些新的視圖,模型,控制器,預編譯的資產等)。
調試此混亂的任何幫助將不勝感激。
編輯:
database.yml的
default: &default adapter: postgresql encoding: unicode pool: 5 production: <<: *default url: <%= ENV['DATABASE_URL'] %>
heroku ps
說:
=== web (Hobby): bin/rails server -p $PORT -e $RAILS_ENV (1) web.1: up 2018/08/11 23:10:04 +0200 (~ 13h ago)
這可能是由幾件事引起的。 其中之一可能是,如果您使用的是諸如Puma之類的並發Web服務器,那么在生產環境中部署它可能會獲得那么多連接。
一種調試方法是在生產模式下啟動應用程序:
rails server -e production
並在數據庫中檢查連接數
select * from pg_stat_activity
並檢查哪個進程正在建立連接。 如果問題仍然存在,請考慮使用連接池PgBouncer
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.