Ruby 使用Net::HTTP的套接字连接不足
我有一些非常简单的Ruby代码(在Linux上运行),它向服务器发送GET请求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
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内核。因此,两者之间的区别并不明显。