中国服务器网

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

如何在Linux中创build很多(我的意思是很多)套接字?

我试图用不同的语言(C#,Java,C ++,PHP)来创build一个简单的程序来连接到一个服务器,所有的行为都是一样的。 所以我相信这个问题更多的是一个操作系统级的东西。 基本上我想程序连接到TCP套接字的服务器,并发送1个字节,然后closures套接字。 这需要每秒完成数千次,并持续一段时间。 这是为了对服务器进行基准testing。 到目前为止,在几千个客户端套接字之后,系统完全停止。 它只能在一分钟左右冷却后才能开始创build套接字。 我已经确定,在传输之后我已经closures了每个sockets。 现在,这类问题对像Apache这样的服务器很熟悉,其中的工具(如ab / siege)被build议使用keep-alive协议对Apache进行基准testing。 也就是说,创buildless量的TCP连接,但通过它们发出多个请求来达到基准testing的目的。 然而,在我们的情况下,这是不可能的,因为我们的专有服务器不提供HTTP服务,也不支持HTTP 1.1保持活动模式。 那么如何实现呢? 我已经检查了以下限制 ulimit被设置为非常高的数字 通过将/proc/sys/net/ipv4/tcp_rw_recycle和/proc/sys/net/ipv4/tcp_rw_reuse为1来消除TCP TIME_WAIT 。(我确实已经用netstat确认了没有TIME_WAIT套接字) 这与线程/进程数量的限制无关。 我已经尝试重新启动我的客户端应用程序,它是一样的。 一旦操作系统拒绝新的套接字,没有任何帮助。 PS。 这不是服务器端的限制。 我们通过购买另一个盒子并在第一个客户端盒子拒绝插入新套接字时运行相同的客户端代码来testing这一点。 服务器处理得很好。 我们不想购买5-10盒,并在它们之间旋转来克服这个问题。 OS:Fedora 10 Linux 2.6.24-23-xen#1 SMP