在做Socket 编程时,我们经常会要问,单机最多可以建树几许个 TCP 连接,本文将介绍如何调剂体系参数来调剂单机的最大TCP连接数。
Windows 下单机的TCP连接数有多个参数共同决意,下面一一介绍:
最大TCP连接数
[HKEY_LOCAL_MACHINE System CurrentControlSet Services Tcpip Parameters]
TcpNumConnections = 0 x00fffffe (Default = 16,777,214)
以上注册表信息设备单机的最大容许的TCP连接数,默认为 16M。这个数值看似很大,这个并不是限制最大连接数的独一前提,还有其他前提会限制到TCP 连接的最大连接数。
最大动态端口数
TCP客户端和办事器连接时,客户端必须分派一个动态端口,默认景象下这个动态端口的分派局限为 1024-5000 ,也就是说默认景象下,客户端最多可以同时创议3977 个Socket 连接。我们可以批改如下注册表来调剂这个动态端口的局限
[HKEY_LOCAL_MACHINE System CurrentControlSet Services Tcpip Parameters]
MaxUserPort = 5000 (Default = 5000, Max = 65534)
最大TCB 数量
体系为每个TCP 连接分派一个TCP 把握块(TCP control block or TCB),这个把握块用于缓存TCP连接的一些参数,每个TCB须要分派 0.5 KB的pagepool 和 0.5KB 的Non-pagepool,也就说,每个TCP连接会占用 1KB 的体系内存。
体系的最大TCB数量由如下注册表设置决意
[HKEY_LOCAL_MACHINE System CurrentControlSet Services Tcpip Parameters]
MaxFreeTcbs = 2000 (Default = RAM dependent, but usual Pro = 1000, Srv=2000)
非Server版本,MaxFreeTcbs 的默认值为1000 (64M 以上物理内存)
Server 版本,这个的默认值为 2000。
也就是说,默认景象下,Server 版本最多同时可以建树并对峙2000个TCP 连接。
最大TCB Hash table 数量
TCB 是经由过程Hash table 来经管的,下面注册表设置决意了这个Hash table 的大小
HKEY_LOCAL_MACHINE System CurrentControlSet services Tcpip Parameters]
MaxHashTableSize = 512 (Default = 512, Range = 64-65536)
这个值指明分派 pagepool 内存的数量,也就是说,若是MaxFreeTcbs = 1000 , 则 pagepool 的内存数量为 500KB
那么 MaxHashTableSize 应大于 500 才行。这个数量越大,则Hash table 的冗余度就越高,每次分派和查找 TCP 连接用时就越少。这个值必须是2的幂,且最大为65536.
IBM WebSphere Voice Server 在windows server 2003 下的典范设备
这是IBM WebSphere Voice Server 的典范设备,大师可以做个参考。原文拜见
IBM Web Sphere Voice Server 设备
MaxUserPort = 65534 (Decimal)
MaxHashTableSize = 65536 (Decimal)
MaxFreeTcbs = 16000 (Decimal)
这里我们可以看到 MaxHashTableSize 被设备为比MaxFreeTcbs 大4倍,如许可以大大增长TCP建树的速度
转载于:https://my.oschina.net/leoson/blog/103294