Ruby 使用Net::HTTP的套接字连接不足

Ruby 使用Net::HTTP的套接字连接不足,ruby,http,sockets,Ruby,Http,Sockets,我有一些非常简单的Ruby代码(在Linux上运行),它向服务器发送GET请求 req = Net::HTTP::Get.new(path) req.content_type = 'text/plain; charset=utf-8' req.body = '' port = 443 res = Net::HTTP.new($host, port) res.use_ssl = true res.start do |http| t = Benchmark.measure do

我有一些非常简单的Ruby代码(在Linux上运行),它向服务器发送GET请求

req = Net::HTTP::Get.new(path)
req.content_type = 'text/plain; charset=utf-8'
req.body = ''

port = 443

res = Net::HTTP.new($host, port)

res.use_ssl = true

res.start do |http|
    t = Benchmark.measure do
        _return = http.request(req).body
    end

    $time= t.real
end

req = nil
res = nil
我遇到的问题是,当我在一个紧密循环中调用此代码时,我最终会在TIME_WAIT状态(最后一次计数为48687)中用套接字填充系统


我想Ruby在这里没有什么特别之处,我在C中也遇到了同样的问题,但是这里有没有GC相关的问题?有什么技巧可以防止这种情况发生吗?

对此你无能为力。看一看。有一种方法可以减少套接字在该状态下的停留时间,但减少它是“危险的”。在linux debian上,如果我将/proc/sys/net/ipv4/tcp_max_syn_backlog从默认的1024设置为128,我可以每秒建立1000个连接,并且不会耗尽套接字。

谢谢。作为一个老C程序员,我很高兴为什么会发生这种情况,只是想知道Ruby库中是否有一些技巧可以帮助解决这个问题。两者都运行Ruby 2.1.5p273和相同版本的linux内核。因此,两者之间的区别并不明显。