• Socket 最大连接数探索記錄及TCP參數優化


    对于单机server,单机可以接受的(tcp)最大连接数是多少?

      socket是系统的一个操作系统句柄,不是本地端口。对于TCP链接来说,由本地的IP、PORT、远端的IP、PROT,来唯一确定一个连接,即TCP得socket。

      服务器創建Socket过程:服务器创建监听socket- >与对外服务的端口号绑定->开始listen->客户端连接到服务器对应的port->服务器accept为新的客户端产生新的socket->基于这个新的socket与客户端交换数据。(這裡新的Socket是指源IP或者源端口不一樣)

      在链接发起端,操作系统中,端口号的范围是0-65535,其中0-1024是预留端口号,不可使用,其他的端口都是可以使用的。理论上是受系统支持的最大打开文件描述符的数目限制(65535);实际则受到系统资源的各种限制,也可以通过多网卡,虚ip等手段来变化。

      在一个链接接收端,同一个listen的socket accept进来的连接,都是本機同一个端口号,是listen之前bind的那个端口号。从同一个listen的socket可以接受的连接实际上也远大于65536,理论上最大的TCP链接数=所有有效ip排列组合的数量*端口数量64000。

      在实际环境中,受到机器资源、操作系统等的限制。

    Windows 下修改TCP连接数限制:

      调整系统参数来调整单机的最大TCP连接数,Windows 下单机的TCP连接数有多个参数共同决定:
    通过修改注册表[HKEY_LOCAL_MACHINE System CurrentControlSet Services Tcpip Parameters]
     
    1.最大TCP连接数      TcpNumConnections (REG_DWORD)(Default = 16,777,214)


    2.TCP关闭延迟时间    TCPTimedWaitDelay(REG_DWORD)的值表示系统释放已关闭的TCP连接并复用其资源之前,必须等待的时间。如果系统显示大量连接处于TIME_WAIT状态,则会导致并发量与吞吐量的严重下降,通过减小该项的值,系统可以更快地释放已关闭的连接,从而为新连接提供更多的资源,特别是对于高并发短连接的Server具有积极的意义。(沒有就添加該鍵值(0-240)s)

     

    3.最大动态端口数   MaxUserPort(REG_DWORD)  (Default = 5000, Max = 65534) 的值表示当应用程序向系统请求可用的端口时,TCP/IP可分配的最大端口号。默认情况下这个动态端口的分配范围为 1024-5000 ,也就是说默认情况下,客户端最多可以同时发起3977 Socket 连接。


    4.最大TCB 数量   MaxFreeTcbs
    系统为每个TCP 连接分配一个TCP 控制块(TCP control block or TCB),这个控制块用于缓存TCP连接的一些参数,每个TCB需要分配 0.5 KB的pagepool 和 0.5KB 的Non-pagepool,也就说,每个TCP连接会占用 1KB 的系统内存。
    非Server版本,MaxFreeTcbs 的默认值为1000 (64M 以上物理内存)Server 版本,这个的默认值为 2000。也就是说,默认情况下,Server 版本最多同时可以建立并保持2000个TCP 连接。


    5. 最大TCB Hash table 数量   MaxHashTableSize TCB 是通过Hash table 来管理的。
    这个值指明分配 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建立的速度。

     linux下, 一个端口可以有多少个长连接 ?是无限个的,ulimit -n 的上限也不是 65535,文件数上限也是归根到底根据内存的大小决定的。(/proc/sys/fs/file-max是系统给出的建议值,系统会计算资源给出一个和合理值,一般跟内存有关系,内存越大,改值越大,ulimit -n 和limits.conf里最大文件数设定可以設置成系統給出的建議值)

    注:本文主要用於個人學習與總結,如有錯誤期待各位大佬的指導!

  • 相关阅读:
    dpdk 连接错误
    strace 跟踪文件
    鲲鹏服务器 centos 升级gcc + 安装qemu
    centos 升级gcc
    undefined reference to `shm_open'
    Golang与C互用
    [ TIME ] Timed out waiting for device dev-ttyS0.device. [DEPEND] Dependency failed for Serial Getty on ttyS0.
    大型 Web 应用插件化架构探索
    网易游戏基于 Flink 的流式 ETL 建设
    基于WASM的无侵入式全链路A/B Test实践
  • 原文地址:https://www.cnblogs.com/shiqing-zhang/p/12990979.html
Copyright © 2020-2023  润新知