Ruby 1.8.7:并发TCP / IP连接

时间:2013-07-26 07:57:06

标签: ruby concurrency tcp benchmarking

我正在尝试向一些远程基准框打开尽可能多的TCPSocket个。 例如,我正在启动64个分叉,每个分支有100个线程/连接(TCPSocket.new

除了使用非常好的机器(32核,64 GB RAM,......)之外,我无法同时打开超过~500-600“ESTABLISHED”连接。当然我也确保sysctl设置正常(ulimit -n是100000)。

我正在使用以下方法检查连接:

netstat -an | awk '/^tcp/ {print $NF}' | sort | uniq -c | sort -rn

这给了我类似的东西:

513 ESTABLISHED
 21 LISTEN
  2 CLOSE_WAIT

现在,我真的怀疑这个问题是由于硬件/延迟/操作系统造成的。 我还试图增加我用作远程基准框的云数量,但这并没有增加已建立的连接,所以我确定它一定是客户端问题。

此外,我建立的500-600连接似乎只是“挂起”。没有数据似乎到达服务器,除了我大幅降低客户端上的分叉/线程数量。

你们从Ruby的角度看到任何瓶颈吗?

我正在使用MRI 1.8.7(我知道它不再受支持了。)

编辑: 这可能与epoll / poll / select有关吗?

编辑2: 是否可以使用65353等不同的FD_SETSIZE重建Ruby MRI 1.8.7? 这会解决问题吗?

0 个答案:

没有答案