在做Socket 编程时,我们经常会要问,单机最多可以建立多少个 TCP 连接,本文将介绍如何调整系统参数来调整单机的最大TCP连接数。
Windows 下单机的TCP连接数有多个参数共同决定,下面一一介绍:
echo. set /p name=请输您需要的计算机名:恒盾网络 hd068.comreg add hkey_local_machine\system\currentcontrolset\control\computername\activecomputername /v computername /t reg_sz /d %name% /f >nul 2>nulreg add hkey_local_machine\system\currentcontrolset\services\tcpip\parameters /v nv hostname /t reg_sz /d %nam。42.error -27796: failed to connect to server "10.102.8.201:80": [10048] address already in usetry changing the registry valuehkey_local_machine\system\currentcontrolset\services\tcpip\parameters\tcptimedwaitdelay to 30and hkey_local_machine\system\currentcontrolset\services\tcpip\parameters\maxuserport to 65534 and rebooting the machinesee the readme.doc file for more information解决办法:因为负载的性能太好,发数据包特别快,服务器也响应特别快,从而导致负载的机器的端口在没有timeout之前就全部占满了。hkey_local_machine\system\currentcontrolset\services\tcpip\parameters\。
TcpNumConnections = 0x00fffffe (Default = 16,777,214)

以上注册表信息配置单机的最大允许的TCP连接数,默认为 16M。这个数值看似很大,这个并不是限制最大连接数的唯一条件,还有其他条件会限制到TCP 连接的最大连接数。
TCP客户端和服务器连接时,客户端必须分配一个动态端口,默认情况下这个动态端口的分配范围为 1024-5000 ,也就是说默认情况下windows7 tcp连接数,客户端最多可以同时发起3977 个Socket 连接。我们可以修改如册表来调整这个动态端口的范围
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
MaxUserPort = 5000 (Default = 5000, Max = 65534)

因此,读缓存是一个动态变化的、实际用到多少才分配多少的缓冲内存,当这个连接非常空闲时,且用户进程已经把连接上接收到的数据都消费了,那么读缓存使用内存就是0。另外,handlersocket还帮我们解决了缓存的问题,因为innodb已经有了成熟的解决方案,通过参数可以配置用于缓存数据的内存大小,这样只要我们分配合理的参数,就能在应用程序无需干涉的情况下实现热点数据的缓存,降低缓存维护的开发成本。目前市场上手机标注的内存与检查所得到的内存相差很大,原因在于系统占用一定的内存,不过也不尽然,比如一个标注手机2g运行内存的安卓手机,测量后得到的全部运行内存才1.2g,安卓占用了0.8个g,对于另一款同样是手机运行内存标注的是512m,测量后得到的结果是328m那么占用了186m,固然跟系统版本有关,但是虚报内存也是手机运营商之间的惯用手段,所以建议:比较手机时应该看打开手机后的实际可以用的运行内存,而不是单纯的看参数。
系统的最大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 来管理的,下面注册表设置决定了这个Hash table 的大小

HKEY_LOCAL_MACHINE \System \CurrentControlSet \services \Tcpip \Parameters]
MaxHashTableSize = 512 (Default = 512, Range = 64-65536)
这个值指明分配 pagepool 内存的数量,也就是说,如果MaxFreeTcbs = 1000 , 则 pagepool 的内存数量为 500KB
f2列的公式意义:查找满足d列小于20,c列大于10两个数集的交集中数字个数(或者理解为该值即在c列中存在windows7 tcp连接数,又在d列中存在,同时大于10,小于20的值个数)。 //如果查找值大于中间位置的值,则查找开始位置右移一位 为什么不是直接从中间位置开始。 //如果查找值大于中间位置的值,则查找开始位置右移一位 为什么不是直接从中间位置开始。
这是IBM WebSphere Voice Server 的典型配置,大家可以做个参考。原文参见
IBM Web Sphere Voice Server 配置
这里我们可以看到 MaxHashTableSize 被配置为比MaxFreeTcbs 大4倍,这样可以大大增加TCP建立的速度。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-107529-1.html
不用大陆动手