Ruby on rails Heroku dev上的Postgres进程分叉错误

Ruby on rails Heroku dev上的Postgres进程分叉错误,ruby-on-rails,postgresql,heroku,Ruby On Rails,Postgresql,Heroku,我目前的Heroku RoR应用程序出现问题,导致无法与Postgres数据库通信。在尝试加载我的应用程序时,我发现了一个通用的问题,即出现了一些问题 运行heroku日志将返回以下内容: 2013-03-28T03:46:01+00:00 heroku[web.1]: Stopping all processes with SIGTERM 2013-03-28T03:46:01+00:00 heroku[web.1]: State changed from starting to up 201

我目前的Heroku RoR应用程序出现问题,导致无法与Postgres数据库通信。在尝试加载我的应用程序时,我发现了一个通用的问题,即出现了一些问题

运行heroku日志将返回以下内容:

2013-03-28T03:46:01+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2013-03-28T03:46:01+00:00 heroku[web.1]: State changed from starting to up
2013-03-28T03:46:01+00:00 app[web.1]: [2013-03-28 03:46:01] ERROR SignalException: SIGTERM
2013-03-28T03:46:01+00:00 app[web.1]:   /usr/local/lib/ruby/1.9.1/webrick/server.rb:90:in `select'
2013-03-28T03:46:05+00:00 heroku[web.1]: Error R12 (Exit timeout) -> At least one process failed to exit within 10 seconds of SIGTERM
2013-03-28T03:46:05+00:00 heroku[web.1]: Stopping remaining processes with SIGKILL
2013-03-28T03:46:07+00:00 heroku[web.1]: Process exited with status 137
2013-03-28T03:48:19+00:00 app[web.1]: Started GET "/projects" for 0.0.0.0 at 2013-03-28 03:48:19 +0000
2013-03-28T03:48:19+00:00 app[web.1]: PG::Error (could not fork new process for connection: Cannot allocate memory
2013-03-28T03:48:19+00:00 app[web.1]: 
2013-03-28T03:48:19+00:00 app[web.1]: could not fork new process for connection: Cannot allocate memory
2013-03-28T03:48:19+00:00 app[web.1]: 
2013-03-28T03:48:19+00:00 app[web.1]: ):
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/postgresql_adapter.rb:1208:in `initialize'
2013-03-28T03:48:19+00:00 app[web.1]: could not fork new process for connection: Cannot allocate memory
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/postgresql_adapter.rb:1208:in `new'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/postgresql_adapter.rb:326:in `initialize'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `new'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/postgresql_adapter.rb:1208:in `connect'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `postgresql_connection'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/abstract/connection_pool.rb:315:in `new_connection'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/abstract/connection_pool.rb:325:in `checkout_new_connection'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/abstract/connection_pool.rb:242:in `loop'
2013-03-28T03:48:19+00:00 app[web.1]:   /usr/local/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/abstract/connection_pool.rb:239:in `checkout'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/abstract/connection_pool.rb:102:in `block in connection'
2013-03-28T03:48:19+00:00 app[web.1]:   /usr/local/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/abstract/connection_pool.rb:101:in `connection'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/abstract/connection_pool.rb:247:in `block (2 levels) in checkout'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/abstract/connection_pool.rb:242:in `block in checkout'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/abstract/connection_specification.rb:171:in `retrieve_connection'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/abstract/connection_specification.rb:145:in `connection'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/abstract/connection_pool.rb:410:in `retrieve_connection'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/query_cache.rb:67:in `rescue in call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/query_cache.rb:61:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.11/lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:405:in `_run__3713961688065884330__call__3295828753336647570__callbacks'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:405:in `__run_callback'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:81:in `run_callbacks'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.11/lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.11/lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.11/lib/action_dispatch/middleware/callbacks.rb:27:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/railties-3.2.11/lib/rails/rack/logger.rb:32:in `call_app'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.11/lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/railties-3.2.11/lib/rails/rack/logger.rb:16:in `block in call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.11/lib/active_support/tagged_logging.rb:22:in `tagged'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/railties-3.2.11/lib/rails/rack/logger.rb:16:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.11/lib/action_dispatch/middleware/request_id.rb:22:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/methodoverride.rb:21:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.11/lib/active_support/cache/strategy/local_cache.rb:72:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/runtime.rb:17:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/lock.rb:15:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.11/lib/action_dispatch/middleware/static.rb:62:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:136:in `forward'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:185:in `lookup'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:66:in `call!'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:245:in `fetch'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:51:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/railties-3.2.11/lib/rails/application.rb:223:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/railties-3.2.11/lib/rails/engine.rb:479:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/content_length.rb:14:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   /usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
2013-03-28T03:48:19+00:00 app[web.1]:   /usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/railties-3.2.11/lib/rails/rack/log_tailer.rb:17:in `call'
2013-03-28T03:48:19+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/handler/webrick.rb:59:in `service'
2013-03-28T03:48:19+00:00 app[web.1]:   /usr/local/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'
关键部分在开头:

2013-03-28T03:48:19+00:00 app[web.1]: PG::Error (could not fork new process for connection: Cannot allocate memory
2013-03-28T03:48:19+00:00 app[web.1]: 
2013-03-28T03:48:19+00:00 app[web.1]: could not fork new process for connection: Cannot allocate memory
2013-03-28T03:48:19+00:00 app[web.1]: 
2013-03-28T03:48:19+00:00 app[web.1]: ):
我发现了一个问题,并试图限制退货数量,但这似乎不是问题所在。我的数据库中只有两个项目,它们都具有以下模型:

class Project < ActiveRecord::Base
  attr_accessible :description, :image, :name, :url
end

这是文本/字符串字段。

我注意到你大约在15分钟前发布了这篇文章。在过去的半个小时里,我在heroku连接到dev/free postgres db时也看到了这个错误。我想知道这是否是他们那边的问题?他们的状态页面没有给出任何提示。

我注意到你在大约15分钟前发布了这篇文章。在过去的半个小时里,我在heroku连接到dev/free postgres db时也看到了这个错误。我想知道这是否是他们那边的问题?他们的状态页面不会给出任何提示。

正如您所知,此错误的关键部分是:

无法为连接派生新进程:无法分配内存 这表明主机、容器或ulimit上下文没有更多可用内存。创建新进程需要为堆栈和其他各种基本数据结构分配内存。它没有太多内存,因此无法分叉进程表明您完全没有内存

在普通主机上,如果可以,您可以登录,检查正在运行的进程,杀死有问题的进程,为有问题的服务设置内存限制,等等。这在Heroku上不是一个真正的选项,但您可以:

减少您正在使用的并发连接的数量;和 减少每个连接的工作量和维护工作量 如果您超过了容器中可用的RAM,这将有所帮助。如果整个主机内存不足,对您没有任何好处

我为一位在升级到更大的Heroku计划后遇到类似问题的客户提供了一些紧急支持。对于发生了什么,我们从未得到确切的答案,但经过几次尝试和几天之后,客户最终创建了他们数据库的追随者副本,然后进行故障转移。这解决了问题,表明问题可能与承载该数据库实例的容器有关。如果可以成功创建跟随者,请尝试此操作。为了做到这一点,您可能需要减少连接数量和工作记忆等

一般来说,请考虑PostgreSQL将以相对较少的积极工作连接和良好的连接池来表现最好。通常情况下,使用20或30个池连接比使用200或300个且没有池器时获得更好的吞吐量。减少连接数量,直到问题消失,您可能也会看到性能提高


披露:我在另一家PostgreSQL支持和服务公司2ndQuadrant工作。

正如你所知,这个错误的关键部分是:

无法为连接派生新进程:无法分配内存 这表明主机、容器或ulimit上下文没有更多可用内存。创建新进程需要为堆栈和其他各种基本数据结构分配内存。它没有太多内存,因此无法分叉进程表明您完全没有内存

在普通主机上,如果可以,您可以登录,检查正在运行的进程,杀死有问题的进程,为有问题的服务设置内存限制,等等。这在Heroku上不是一个真正的选项,但您可以:

减少您正在使用的并发连接的数量;和 减少每个连接的工作量和维护工作量 如果您超过了容器中可用的RAM,这将有所帮助。如果整个主机内存不足,对您没有任何好处

我为一位在升级到更大的Heroku计划后遇到类似问题的客户提供了一些紧急支持。对于发生了什么,我们从未得到确切的答案,但经过几次尝试和几天之后,客户最终创建了他们数据库的追随者副本,然后进行故障转移。这解决了问题,表明问题可能与承载该数据库实例的容器有关。如果可以成功创建跟随者,请尝试此操作。为了做到这一点,您可能需要减少连接数量和工作记忆等

一般来说,请考虑PostgreSQL将以相对较少的积极工作连接和良好的连接池来表现最好。通常情况下,使用20或30个池连接比使用200或300个且没有池器时获得更好的吞吐量。减少连接数量,直到问题消失,您可能也会看到性能提高

披露:我在另一家PostgreSQL支持和服务公司2ndQuadrant工作。

It版本

很可能是。我一整天都在经历这个问题,所以我想这可能与他们有关。很高兴看到我不是唯一一个有这个问题的人。我现在遇到了一个稍微鼓舞人心的错误:致命的:数据库系统在过去15分钟内启动了PG::error,他们今天遇到了同样的问题。不幸的是,鉴于Heroku对DB的控制有限,我们无能为力。有没有办法重新启动DB?很可能是这样。我一整天都在经历这个问题,所以我想这可能与他们有关。很高兴看到我不是唯一一个有这个问题的人。我现在遇到了一个稍微鼓舞人心的错误:致命的:数据库系统在过去15分钟内启动了PG::error,他们今天遇到了同样的问题。不幸的是,鉴于Heroku对DB的控制有限,我们无能为力。有没有办法重新启动DB?我觉得奇怪的是,你的堆栈跟踪包含以下行/usr/local/lib/ruby/1.9.1/webrick/server.rb:90:在“选择”中,我感觉Heroku只运行了很小的一部分servers@LeoCorrea看这个:啊,我明白了。“我使用Thin的时间太长了。@LeoCorrea是的,这只是我正在测试的东西,昨天刚刚抛出的。”。这似乎是Heroku的问题,而不是我的应用程序出了什么问题,尽管看到Lucas的回答downI觉得奇怪的是,你的堆栈跟踪包含以下行/usr/local/lib/ruby/1.9.1/webrick/server.rb:90:在“选择”中,我觉得Heroku只运行了很小的一部分servers@LeoCorrea看这个:啊,我明白了。“我使用Thin的时间太长了。@LeoCorrea是的,这只是我正在测试的东西,昨天刚刚抛出的。”。这似乎是Heroku的问题,而不是我的应用程序出了什么问题,尽管Lucas的回答是:这实际上是一个非常小的测试应用程序,几乎没有并发连接,正如我在原始帖子中所说的,我只有两个小记录,因此无法理解为什么我的内存不足。我已经确定这只是Heroku的问题,不一定是我的应用程序的问题。不过,您确实提供了一些非常好的信息供将来参考,所以谢谢您。@CraigRinger,您能详细说明如何实际减少Heroku上的连接数吗?在哪里设置这些变量?谢谢@您可以控制应用程序中的连接计数,而不是数据库配置。减少应用程序使用的连接数。对于Rails应用程序,通过在database.yml中设置较小的池大小来完成。@CraigRinger,但是Heroku重写了database.yml?@ben-Ah,在这种情况下。。。不知道,我自己不使用Heroku,只知道PostgreSQL的一面。发布一个新的问题,标记为这实际上是一个非常小的测试应用程序,几乎没有并发连接,正如我在原始帖子中所说的,我只有两个小记录,因此无法找出内存不足的原因。我已经确定这只是Heroku的问题,不一定是我的应用程序的问题。不过,您确实提供了一些非常好的信息供将来参考,所以谢谢您。@CraigRinger,您能详细说明如何实际减少Heroku上的连接数吗?在哪里设置这些变量?谢谢@您可以控制应用程序中的连接计数,而不是数据库配置。减少应用程序使用的连接数。对于Rails应用程序,通过在database.yml中设置较小的池大小来完成。@CraigRinger,但是Heroku重写了database.yml?@ben-Ah,在这种情况下。。。不知道,我自己不使用Heroku,只知道PostgreSQL的一面。发布一个新问题