Windows 下单机最大TCP连接数 - eaglet - 博客园
在做Socket 编程时,我们经常会要问,单机最多可以建立多少个 TCP 连接,本文将介绍如何调整系统参数来调整单机的最大TCP连接数。
Windows 下单机的TCP连接数有多个参数共同决定,下面一一介绍:
最大TCP连接数
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
TcpNumConnections = 0x00fffffe (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建立的速度。
各种高并发系统的Windows服务器必须要的配置,如Apache http Server、Tomcat、Weblogi、Nginxc等
java opc jeasyopc-永不退缩-我的搜狐
关于jeasyopc的详细资料可以到https://sourceforge.net/projects/jeasyopc 上去看看。
有了jeasyopc,一切操作都简单的很,如下:
//第一步,初始化
//第二步,建立一个JOpc对象,三个参数,分别是OpcServer的IP,Server的name,还有JOpc的name
JOpc jopc = new JOpc("172.29.10.173", "Matrikon.OPC.Simulation.1", "JOPC1");
//第三步,建立连接
jopc.connect();
//第四步,新建一个OPC的group和item,并把item加到group中
OpcGroup group = new OpcGroup("TestGroup", true, 500, 0.0f);
OpcItem item = new OpcItem("Bucket Brigade.Int1", true, "");
group.addItem(item);
//第五步,注册group,item
jopc.addGroup(group);
jopc.registerGroup(group);
jopc.registerItem(group, item);
//第六步赋值,并同步至服务器
item.setValue(new Variant(1));
jopc.synchWriteItem(group, item);
//最后,该释放的全释放掉
jopc.unregisterItem(group, item);
jopc.unregisterGroup(group);
JOpc.coUninitialize();
apache/php 性能大幅提升关键参数 - 没有开花的树 - 博客频道 - CSDN.NET
apache/php 提升性能关键参数
参数1:Apache KeepAlive
Apache KeepAlive需要和线程绑定,服务器繁忙时会耗光所有线程
- KeepAlive Off
参数2:Apache MPM
Apache MPM可以通过优化apache内部进程的调度来提高apache的处理能力,这里为windows参数(其他系统没测试,不提供参考,具体看官方文档)
- <IfModule mpm_winnt.c>
- #Win32DisableAcceptEx
- ThreadsPerChild 1000
- MaxRequestsPerChild 10000
- </IfModule>
参数Win32DisableAcceptEx会降低性能,但如果服务器网络不稳定,Apache经常报这个错误“[warn] (OS 64)指定的网络名不再可用。 winnt_accept: Asynchronous AcceptEx failed.”,就得考虑使用
参数Win32DisableAcceptEx的使用也是有风险的,可能带来另外一个问题。ApacheBench测试时,容易出现以下错误:
apr_socket_recv: 远程主机强迫关闭了一个现有的连接。 (730054)
Total of 195 requests completed