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

the*_*isu 6 unix sockets windows operating-system tcp

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

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

Tor*_*xed 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
Run Code Online (Sandbox Code Playgroud)

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

sysctl net.ipv4.ip_local_port_range
Run Code Online (Sandbox Code Playgroud)

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

sysctl net.ipv4.tcp_max_syn_backlog
sysctl net.core.netdev_max_backlog
Run Code Online (Sandbox Code Playgroud)

另外,在这里找到一个完整的描述:增加linux中tcp/ip连接的最大数量


cor*_*iKa 5

一台2Gb的Windows服务器应该支持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.

似乎免费的BSD可以有超过100万,这是2年多前:

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

$ netstat -an | grep -c EST

1016313

所以在10 ^ 5到10 ^ 7个插座之间,ish.

  • 这根本不准确,Torxed。有一些例子是每秒 100 万个连接(平均持续时间为 10 秒)的 1000 万个持续连接。 (2认同)