Windows Socket 最大连接数

Windows Socket 最大连接数

大家好,又见面了,我是全栈君。

原文:
Windows Socket 最大连接数

Socket 编程时,单机最多可以建立多少个 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 下的典型配置

MaxUserPort = 65534 (Decimal)

MaxHashTableSize = 65536 (Decimal)

MaxFreeTcbs = 16000 (Decimal)

这里 MaxHashTableSize 被配置为比MaxFreeTcbs 大4倍,这样可以大大增加TCP建立的速度。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107851.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 知己知彼:一篇来自前端同学对后端接口的吐槽!

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:李熠 juejin.im/post/6844903861841313806 前言 去年的某个时候就想写一篇关于…

    2021年6月24日
    115
  • JAVA队列( Queue ) 详解[通俗易懂]

    JAVA队列( Queue ) 详解[通俗易懂]什么是队列?队列是一种特殊的线性表,遵循先入先出、后入后出的基本原则,一般来说,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,但是java的某些队列运行在任何地方插入删除;比如我们常用的LinkedList集合,它实现了Queue接口,因此,我们可以理解为LinkedList就是一个队列;java队列特性队列主要分为阻塞和非阻塞,有界和无界、单向链表和双向链表之分;阻塞和非阻塞阻塞队列入列(删除元素)时,如果元素数量超过队列总数…

    2022年7月9日
    34
  • caffe使用教程_单反使用入门教程

    caffe使用教程_单反使用入门教程目录一、概况简介:优点:二、使用坐标缓存填充策略过期策略时间监听外部存储springboot集成三、参考文档功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入一、概况就一般的互联网行业中的应用而言,目前比较通用的并且也是普遍存在的

    2025年6月25日
    3
  • tomcat日志配置——如何查看日志

    tomcat日志配置——如何查看日志Tomcat日志设定1、Tomcat日志概述Tomcat日志信息分为两类:一、是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息。二、是访问日志信息,它记录的访问的时间,IP,访问的资料等相关信息。2Tomcat日志配置2.1访问日志的配置默认tomcat不记录访问日志,如下方法可以使tomc…

    2022年6月20日
    79
  • Kafka集群_郑州居家办公全员核酸

    Kafka集群_郑州居家办公全员核酸文章目录一、启动集群二、集群验证一、启动集群对于只有一个broker的kafka来说,这就是一个节点数为1的集群。现在,让我们启动一个几点数为3的集群。1、复制出另外两份kafka配置文件cpconfig/server.propertiesconfig/server-1.propertiescpconfig/server.propertiesconfig/server-2.properties#修改server-1.properties中的以下几项配置为broker.id=1li

    2025年6月7日
    2
  • 斗地主老是输?一起用Python做个AI出牌器![通俗易懂]

    斗地主老是输?一起用Python做个AI出牌器![通俗易懂]前言最近在网上看到一个有意思的开源项目,快手团队开发的开源AI斗地主——DouZero。今天我们就一起来学习制作一个基于DouZero的斗地主出牌器,看看AI是如何来帮助我们斗地主的吧!首先一起来看看AI出牌器的效果:下面,我们开始介绍这个AI出牌器的制作过程。一、核心功能设计首先我们这款出牌器是基于DouZero开发的,核心是需要利用训练好的AI模型来帮住我们,给出最优出牌方案。其次关于出牌器,先要需要确认一个AI出牌角色,代表我们玩家自己。我们只要给这个A

    2022年4月29日
    84

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号