2016-10-14 4 views
1

Я пытаюсь сделать работу приложения rails под номером passenger без везения. Он использует sequel для подключения к postgresql. Запросы случайным образом занимают слишком много времени. Я был в состоянии найти, где приложение тратит свое время:Запросы застряли в PG :: Connection # async_exec

 %self      total      self      wait     child     calls  name 
 99.92     65.713    65.713     0.000     0.000        5   PG::Connection#async_exec 
  0.00      0.002     0.002     0.000     0.000      264   Set#delete 
... 

Предположительно, это не происходит с webrick, и я собираюсь попробовать и запустить его под unicorn.

Вот relatedlinks.

Я использую passenger-5.0.30, ruby-2.3.0, postgresql-9.4, pg-0.19.0, rails-5.0.0.1. То же самое касается unicorn-5.1.0. Приложение работает в контейнере lxc. Хост и гостевые ОС - ubuntu/xenial.

ответ

0

Проблема была решена после того, как мы начали восстанавливать соединения с базой данных. Мы использовали sequel в проекте, и Passenger обрабатывает эту проблему только тогда, когда используется ActiveRecord.

Чтобы расширить его, по умолчанию Пассажир использует умный нерест для рубиновых приложений. Сначала он запускает процесс предварительного загрузчика, который загружает фреймворк и все библиотеки. После этого процесс предварительного загрузчика порождает рабочие процессы, когда возникает необходимость, которые обрабатывают запросы. Когда нерестующий обрабатывает процессы, все дескрипторы файлов наследуются от процесса предварительного загрузчика. Поэтому, если вы не восстановите соединение с базой данных, весь рабочий процесс разделяет один, установленный прелоадером. Это приводит ко всем видам странного поведения. Как запросы слишком долго.

До этого мы также перешли на обращение к соединениям WebSocket с отдельным процессом. Не уверен, что он внес свой вклад в проблему.

Подробнее об этом здесь:

Disconnect If Using Forking Webserver with Code Preloading
Unintentional file descriptor sharing
Running the Action Cable server on the same host and port, under a sub-URI

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

  • Нет связанных вопросов^_^