我有一些相当的锅炉板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有关的问题吗?任何防止这种情况发生的提示或技巧?
答案 0 :(得分:1)
你无能为力。看看https://serverfault.com/questions/86550/apache-keep-alive-or-not-keep-alive/86565#86565。有一种方法可以减少插座停留在该状态的时间,但减少它是“危险的”。您可以做的最好的事情是尝试重新使用连接,如果服务器保持打开状态。
答案 1 :(得分:1)
在linux debian上,如果我将 / proc / sys / net / ipv4 / tcp_max_syn_backlog 设置为默认 1024 128 ,我可以制作每秒1000个连接,但没有用完套接字。