我有3个Rails应用程序都使用相同的代码库.2/3的应用程序运行正常,但其中一个给了我这个错误:
无法为连接分叉新进程:无法分配内存
在尝试查看Postgres日志时,它更加具体:
psql:bin // psql-9.2.1-64bit pv:bin // pv-1.1.4-64bit psql-9.2.1-64bit:
无法分叉新进程进行连接:无法分配内存
无法分叉新进程进行连接:无法分配内存
无法分叉新进程进行连接:无法分配内存
bin/brie:第146行:[::整数表达式预期pg_dump:
bin // pg_dump-9.2.1-64bit psql-9.2.1-64bit:
无法fork新进程连接:无法分配内存
无法分叉新进程进行连接:无法分配内存
无法分叉新进程进行连接:无法分配内存
这是一个相对较小的应用程序,尤其是数据方面.我试过重新推动一切,我尝试了heroku-restart,而Heroku的状态页面说它们很好.任何帮助,将不胜感激.
我们的Rails 4.0应用程序(Ruby 2.1.2)使用Puma 2.9.0在Nginx上运行.
我最近注意到,对我们的应用程序的所有请求都会在一段时间后停止(通常为1或2天).
检查设置为debugmode的日志时,我注意到以下日志堆栈:
[2014-10-11T00:02:31.727382 #23458] INFO -- : Started GET "/" for ...
Run Code Online (Sandbox Code Playgroud)
它确实意味着请求实际上访问了Rails应用程序,但不知何故它没有继续,而通常它会是:
I, [2014-10-11T00:02:31.727382 #23458] INFO -- : Started GET "/" for ....
I, [2014-10-11T00:02:31.729393 #23458] INFO -- : Processing by HomeController#index as HTML
Run Code Online (Sandbox Code Playgroud)
我的puma配置如下:
threads 16,32
workers 4
Run Code Online (Sandbox Code Playgroud)
我们的应用程序仅用于现在的内部使用,因此RPM非常低,并且所有请求都不会超过2秒.
可能导致此问题的原因是什么?(puma配置,数据库连接等)
先感谢您.
更新:在安装gem rack_timer以记录在每个中间件上花费的时间之后,我意识到我们的请求在发生挂起时一直停留在ActiveRecord :: QueryCache上,并且有大量时间:
Rack Timer (incoming) -- ActiveRecord::QueryCache: 925626.7731189728 ms
Run Code Online (Sandbox Code Playgroud)
我暂时删除了这个中间件,它似乎恢复正常.但是,我理解这个中间件的目的是提高性能,因此删除它只是一个临时解决方案.请帮我找出这个问题的可能原因.
仅供参考,我们使用mysql(5.1.67)和适配器mysql2(0.3.13)