2013-03-28 5 views
1

У меня в настоящее время проблема с моим приложением Heroku RoR, что приводит к тому, что он не может связаться с базой данных Postgres. При попытке загрузить мое приложение, я получаю общее сообщение «что-то пошло не так».Ошибка процесса преобразования Postgres на Heroku dev

Запуск heroku logs возвращает следующее:

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]:): 

Я нашел this вопрос, и я попытался ограничить количество возвращенных предметов, но похоже, не проблема. У меня только две позиции в моей базе данных, каждая из которых имеет следующую модель:

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

Каковы текстовые или строковые поля.

+0

Мне кажется странным, что ваша трассировка стека содержит эту строку '/usr/local/lib/ruby/1.9.1/webrick/server.rb:90:in 'select'' Я был под впечатлением, что Heroku только побежал Thin серверы –

+0

@LeoCorrea см. это: https://devcenter.heroku.com/articles/ruby#webserver – Lander

+0

А, я вижу. Я слишком долго использовал Thin. –

ответ

3

Я заметил, что вы разместили это примерно 15 минут назад. Я начал видеть эту ошибку за последние полчаса и по героку (подключаясь к dev/free postgres db). Интересно, это проблема в их конце? Их страница статуса не дает никаких намеков.

+0

Это очень хорошо. Я испытывал эту проблему в течение всего дня и после, поэтому я подумал, что это может быть что-то с ними. Рад видеть, что я не единственный, у кого есть эта проблема. – Lander

+0

Теперь я получаю немного более обнадеживающую ошибку: «FATAL: система базы данных запускается (PG :: Error)» –

+0

Мое приложение теперь работает на самом деле, но мы посмотрим, как долго это длится ... – Lander

1

Только так вы знаете, ключевая часть этой ошибки:

could not fork new process for connection: Cannot allocate memory 

Это говорит о том, что хозяин, контейнер, или контекст ULIMIT имеет не более доступную память. Создание нового процесса требует выделения памяти для стека и различных других базовых структур данных. Это не так много памяти, поэтому невозможность разветвить процесс предполагает, что вы полностью вне ОЗУ.

На обычном хосте вы должны войти в систему (если можете), изучить запущенные процессы, убить проблемные процессы, установить ограничения на память для проблемных служб и т. Д. Это на самом деле не вариант на Heroku, но вы можете :

  • Уменьшить количество одновременных соединений, которые вы используете; и
  • Уменьшить work_mem и maintenance_work_mem для каждого соединения

Если вы превышая RAM, доступных в контейнере это поможет. Если весь хост потерял память, это не принесет вам пользы.

Я сделал некоторую экстренную помощь для клиента, у которого была аналогичная проблема после того, как они обновили до более крупного плана Heroku. Мы никогда не получали четкого ответа относительно того, что произошло, но клиент был в конечном итоге - после нескольких попыток и нескольких дней - создать последователя (реплики) своей базы данных, а затем перешел к нему. Это устранило проблемы, предполагая, что проблемы могут быть связаны с контейнером, в котором размещается этот экземпляр базы данных. Если вы можете успешно создать последователя, попробуйте это. Возможно, вам придется сократить количество подключений и work_mem и т. Д., Чтобы это сделать.

В целом, пожалуйста, учтите, что PostgreSQL будет работать лучше всего с относительно низким числом активных рабочих подключений и хорошим пулом соединений. Обычно вы получите более высокую пропускную способность с 20 или 30 объединенными соединениями, чем с 200 или 300 и без пула. Сократите количество подключений до тех пор, пока проблема не исчезнет, ​​и вы, вероятно, также увидите увеличение производительности.

(Раскрытие информации: Я работаю для 2ndQuadrant, еще одной службы поддержки и услуг PostgreSQL).

+0

На самом деле это очень небольшое тестовое приложение с очень небольшим количеством одновременных подключений, и, как я уже сказал в оригинальном посте, у меня было только две небольшие записи, и поэтому я не мог понять, почему у меня закончилась память. Я решил, что это просто проблема в конце Heroku, и не обязательно с моим приложением. Вы дали очень хорошую информацию для дальнейшего использования, поэтому, спасибо. – Lander

+0

@CraigRinger, не могли бы вы подробно рассказать о том, как фактически сократить количество соединений на Heroku? Где вы устанавливаете эти переменные? Благодаря! – ben

+0

@ben Вы контролируете количество подключений в своем приложении, а не конфигурацию базы данных. Уменьшите количество подключений, которые использует ваше приложение. В случае с Rails-приложениями это делается путем установки меньшего размера пула в 'database.yml'. –

Смежные вопросы