我可以一次打开多少个TCP套接字?

时间:2014-02-25 20:36:20

标签: windows sockets unix tcp operating-system

我将开发一个TCP服务器应用程序。我在“选择服务器”步骤。 我的TCP服务器将拥有2000多个客户端和每个客户端一个套接字。

根据操作系统的不同,创建的套接字数量是否有限制?哪个操作系统允许在给定时间打开更多的插座?

2 个答案:

答案 0 :(得分:7)

是的,有限制,但你可能永远不会接近它们(连接与连接或接入连接不同,连接是一种幸福和已建立的连接显着高于其他州。@ corsiKa对你可以拥有的连接会话的数量给出了很好的报价。)

以下是一些有用的命令:

# Shows some general useful information,
ulimit -a

# if not, here are some other places to look
# maximum files:
cat /proc/sys/fs/file-max  

# maximum filedescriptors:
cat /proc/sys/fs/file-nr  

# maximum backlog of unaccepted clients:
cat /proc/sys/net/core/somaxconn

# And number of threads to run at once:
cat /proc/sys/kernel/threads-max

有多少开放You->Them连接基本上限制了您可以使用并分配为池的本地端口数量,您可以在以下位置找到此信息:

sysctl net.ipv4.ip_local_port_range

传入端口上还有一个“buffert”,限制了您可以同时连接到您的客户端数量,请在此处查找此信息:

sysctl net.ipv4.tcp_max_syn_backlog
sysctl net.core.netdev_max_backlog

另外,请在此处找到完整说明:Increasing the maximum number of tcp/ip connections in linux

答案 1 :(得分:5)

A 2Gb Windows server should support 16,000 - 所以这很不错,因为2Gb相当便宜:

  

在Windows NT,Windows 2000,Windows XP和Windows 2003 Server上,套接字是从非分页内存池分配的,因此可以在系统范围内创建的实际套接字数取决于安装的物理内存量。非分页内存池的大小是物理RAM的1/8,Windows NT上最大为128Mb,Windows 2000及更高版本平台上最大为256Mb。 Windows NT服务器的理论最大值约为12,000个套接字,Windows 2000和更高版本的理论最大值为25,000个。 实际上,可以安全地估计Windows Server平台可以为每512Mb物理内存分配大约4,000个套接字。对于Windows NT,这意味着对于具有1Gb或更多RAM的系统,最大套接字数约为8,000。对于Windows 2000及更高版本,对于具有2Gb或更多RAM的系统,最大套接字数约为16,000。

看起来free BSD can have over 1 million,那是2年多前的事了:

  

在过去的几个月里,我们对服务器进行了大量改进,以提高性能,正常运行时间和可扩展性。今天我们调整了一些旋钮,转移了一些流量,并在一台机器上实现了100万个已建立的tcp会话(并且内存和cpu备用!)

     

$ netstat -an | grep -c EST

     

1016313

所以在10 ^ 5到10 ^ 7个插槽之间,ish。