У нас есть режим скользящего перезапуска для нашего кластера mongrel, который отправляет сигнал 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 вызывает синхронную остановку на работающем сервере, поэтому он должен блокироваться до освобождения сокета.
Кто-нибудь видел эту ошибку?
У кого-нибудь есть идеи, чем это может быть вызвано?