Отправка USR2 в mongrel_rails иногда приводит к «адресу, который уже используется» при перезапуске - PullRequest
1 голос
/ 28 октября 2009

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

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

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

...