From: Hongli Lai Date: 2008-08-25T21:40:14+09:00 Subject: [ruby-core:18381] [Bug #496] DRb.start_service(nil) is very slow Bug #496: DRb.start_service(nil) is very slow http://redmine.ruby-lang.org/issues/show/496 Author: Hongli Lai Status: Open, Priority: Normal On some systems - such as mine - DRB.start_service(nil) is very slow. This is caused by the fact that DRb.open_server calls TCPServer.open(nil, 0).addr[1]. On my system, this takes about 3 seconds, and during those 3 seconds there is 0% CPU usage. I suspect it has got something to do with the fact that retrieving the port of a server socket that's bound to 0.0.0.0 is for some unknown reason very slow. The problem can be fixed by replacing the following line in drb.rb uri = 'druby://:0' unless uri with: uri = 'druby://localhost:0' unless uri This does not violate DRb.start_service's contract, because a nil indicates that it will bind to the default local host name. The following monkeypatch works around the issue: module DRb class << self alias orig_start_service start_service end def self.start_service(uri = nil, front = nil, config = nil) if uri.nil? orig_start_service("druby://localhost:0", front, config) else orig_start_service(uri, front, config) end end end ---------------------------------------- http://redmine.ruby-lang.org