実行中の各プロセスにUSR2シグナルを送信する、mongrelクラスターのローリングリスタートモードがあります。
これは、ほとんどの場合、うまく機能します。ただし、非常にまれに、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ハンドラーは実行中のサーバーで同期停止を呼び出すため、ソケットが解放されるまでブロックする必要があります。
誰かがこのエラーを見たことがありますか?
誰かがそれを引き起こす可能性のあるアイデアを持っていますか?