我们正在在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'几次来处理更复杂的查询(每个操作不是每个查询)。 –