Отправка 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 вызывает синхронную остановку на работающем сервере, поэтому он должен блокироваться, пока сокет не будет освобожден.

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

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

0 ответов

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