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



我将开发一个TCP服务器应用程序。我正在进行"选择服务器"步骤。我的TCP服务器将有2000多个客户端,每个客户端有一个套接字。

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

是的,有一些限制,但你可能永远无法接近它们(连接与连接或隔离连接不同,连接是已经发生并建立的,这个数字明显高于其他状态。@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

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

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

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

一台2Gb的Windows服务器应该支持16000,所以这相当不错,因为2Gb相当便宜:

在Windows NT、Windows 2000、Windows XP和Windows 2003 Server上,套接字是从非分页内存池中分配的,因此系统范围内可以创建的套接字的实际数量取决于安装的物理内存量。非分页内存池是物理RAM大小的1/8,在Windows NT上最大为128Mb,在Windows 2000及更高版本平台上最大为256Mb。Windows NT服务器的理论最大值约为12000个套接字,Windows 2000及更高版本为25000个套接字实际上,可以肯定地估计,Windows Server平台可以为每512Mb的物理内存分配大约4000个套接字。对于Windows NT,这意味着对于1Gb或1Gb以上RAM的系统,套接字的最大数量将在8000个左右。对于Windows 2000及更高版本,对于2Gb或以上RAM的系统,最大插槽数约为16000个。

看起来免费的BSD可以有100多万,那是两年前的事了:

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

$netstat-an|grep-c EST

1016313

所以介于10^5和10^7套接字之间。

最新更新