使用Net :: HTTP耗尽套接字连接

时间:2009-11-23 17:23:58

标签: 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
        _return = http.request(req).body
    end

    $time= t.real
end

req = nil
res = nil

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

我想这里的Ruby并没有什么特别之处,我遇到了与C相同的问题,但是这里有任何与GC有关的问题吗?任何防止这种情况发生的提示或技巧?

2 个答案:

答案 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个连接,但没有用完套接字。