我们的 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'
查看 mongrel 源代码,USR2 处理程序在正在运行的服务器上调用同步停止,因此它应该阻塞直到套接字被释放。
有没有人看到这个错误?
有没有人有任何想法可能导致它?