Отправка USR2 в mongrel_rails иногда приводит к "адресу, который уже используется" при перезапуске

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

Это прекрасно работает, большую часть времени. Но очень редко процесс mongrel будет остановлен, а затем перезапущен со следующей ошибкой:

/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/tcphack.rb:12:in `initialize_without_backlog': Address already in use - bind(2) (Errno::EADDRINUSE)
from /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/tcphack.rb:12:in `initialize'
from /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:93:in `new'
from /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:93:in `initialize'
from /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:139:in `new'
from /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:139:in `listener'

Посмотрев на источник беспорядка, обработчик USR2 вызывает синхронную остановку на работающем сервере, поэтому он должен блокироваться, пока сокет не будет освобожден.

Кто-нибудь видел эту ошибку?

У кого-нибудь есть идеи, что может вызвать это?

(Сначала я задавал этот вопрос на StackOverflow, но подумал, что он может быть более уместным здесь)

1 ответ

У меня та же ошибка... я не знаю почему.

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

Другие вопросы по тегам