我們正在在Heroku Rails應用程序遇到一個奇怪的問題。中庸之道之後,從Rails的3.2.17遷移到Rails的4.0.3我們PostgreSQL服務器顯示內存使用量的增加無限,然後返回在每次請求以下錯誤:內存泄漏升級後導軌4
ERROR: out of memory
DETAIL: Failed on request of size xxx
中庸之道解除與軌道4的申請後, postgresql內存開始增加。
正如你可以看到下面的截圖,它從500 MO增加到比3,5Go更在3小時內
同時,每秒提交一倍。它由120通過每秒承諾:
280每秒承諾:
值得注意的是,當我們重新啓動應用程序,存儲再往正常值的600 Mo之前超過3幾小時後(然後每個SQL請求顯示'內存不足'錯誤)。這就像殺死ActiveRecord連接在postgresql服務器上釋放內存一樣。
我們可能有內存泄漏的地方。 但是:
- 它在Rails 3.2中工作得很好。也許這個問題是我們爲使代碼適應Rails 4和Rails 4代碼本身所做的更改之間的結合。軌道4升級後每秒中庸之道提交數
- IHE增加似乎很奇怪。
我們的堆棧是:
- 的Heroku,X2 DYNOS
- PostgreSQL中,在Heroku伊卡計劃
- 麒麟,3名工人每個實例
- 的Rails 4.0.3
- Redis的緩存。
- 值得注意的寶石:延遲作業(4.0.0),活動管理員(在主分支),舒適的沙發墨西哥(1.11.2)
一切似乎在我們的代碼真正看中的。
我們PostgreSQL的配置是:
- work_mem:100MB
- 的shared_buffers:1464MB
- MAX_CONNECTIONS:500
- maintenance_work_mem:64MB
是否有人曾經經歷過這樣的行爲,當切換到Rails 4?我正在尋找重現的想法。
非常歡迎所有幫助。
在此先感謝。
在Pg中,你的'shared_buffers','max_connections','work_mem'和'maintenance_work_mem'是什麼? –
感謝Craig,問題用這些信息更新。 –
您的最大內存使用量至少爲100MB * 500 + 1464MB,因此接近52GB。難怪你有問題。特別是因爲單個會話可以使用'work_mem'幾次來處理更復雜的查詢(每個操作不是每個查詢)。 –