zoukankan      html  css  js  c++  java
  • 性能测试:通过设置注册表提高 P2P/IIS 并发数

    写在前面

    • 在执行性能测试(如用 JMeter 直接压接口)的时候,有的时候并发数上不去、本机大面积出现 TCP 状态为 TIME_WAIT,除了放开 TCP 端口数和调整默认 TCP 释放时间外,另外几个注册表项同样重要且需要调整。
    • 以下设置项针对的是本机和远端机。
    • 设置完成后,重启下电脑使生效。

    增加TCP 连接数:TcpNumConnections

    	[HKLMSystemCurrentControlSetServicesTcpipParameters]
    	TcpNumConnections = 16777214  # DWORD 值,默认值 16777214
    

    增加动态端口数量

    • 当客户端与服务器连接时,客户端将 socket 连接绑定到本地动态端口号(匿名,短暂)。
    • Windows中动态端口的默认范围是 1025 到 5000,因此为每个IP地址提供 3976 个出站并发连接。
    	[HKLMSystemCurrentControlSetServicesTcpipParameters]
    	MaxUserPort = 65534 # DWORD值,设置成 65534 即可。
    
    • P.S.:

      • vista和 server 2008 保留端口的动态端口号莫默认范围已经改为 49152-65535。
      • 在基于 server 2008 的 Microsoft Exchange Server 2007,默认端口范围为 1025-60000
    • 查看、设置 TCP / UDP 命令

    # 查看 TCP / UDP 数量命令
    netsh int ipv4 show dynamicport tcp
    netsh int ipv4 show dynamicport udp
    netsh int ipv6 show dynamicport tcp
    netsh int ipv6 show dynamicport udp
    
    # 设置
    netsh int ipv4 set dynamicport tcp start=10000 num=1000
    netsh int ipv4 set dynamicport udp start=10000 num=1000
    netsh int ipv6 set dynamicport tcp start=10000 num=1000
    netsh int ipv6 set dynamicport udp start=10000 num=1000
    # 说明
    # 最小设置端口范围位 255
    # 最小起始端口号:1025
    # 最大结束端口号:65534
    

    调整 TCB 控制块

    • TCB:TCP Control Block:TCP 控制块:一个拥有 0.5Kb 分页池 和 0.5Kb 非分页池吃的数据结构【这个是个什么东西?】
    • 每个 TCP连接 都会维护一个 TCB。
    • TCB 会被预分配并存储在表中,以避免 每次创建/关闭连接 时在 分配/取消分配 TCB 上花费时间。
    • TCB 表支持 重用、缓存并改善内存管理(但注册表项配置的值限制了TCP能够支持的连接数(ACTIVE 和 TIME_WAIT 状态的连接),故这里也需要调整下)

    更改 TCB 表的大小

    [HKLMSystemCurrentControlSetServicesTcpipParameters]
    MaxFreeTcbs = 2000 # DWORD值,默认值依赖于内存,一般设置成 2000 即可
    

    TCB 哈希表

    • 为了加快在 TCB表 中的搜索,系统会创建一张 哈希表,用于优化索引。
    • 如果该 hash 表小于总的有效连接数,那么会占用 CPU 去搜索,为此需要配置下该 hash 表的大小
    # 多核下,该值不应大于最大并发连接数(不应大于TCP表设置的值:MaxFreeTcbs)
    [HKLMSystemCurrentControlSetServicesTcpipParameters]
    MaxHashTableSize = 2000 # DWORD值,默认512,可选范围:64-65536,一般跟 MaxFreeTcbs 保持一致即可
    

    NumTcbTablePartitions

    • 多核情况下,该键值也需要设置下,一般 "CPU数量*4"
    [HKLMSystemCurrentControlSetServicesTcpipParameters]
    NumTcbTablePartitions = 16 # DWORD值,按实际 CPU核心数*4 设置
    

    设置 TcpTimedWaitDelay

    • 该键值表示一个 connection 在被释放重用前,可以处于 TIME_WAIT 状态多长时间。
    • TIME_WAIT:一个 connection 关闭后会进入 TIME_WAIT 状态,并且在实际释放之前继续占用该端口号 240s。
      • TIME_WAIT 表示的是 "本地" 主动关闭连接,表示的是当前主机,而非远端主机。
    [HKLMSystemCurrentControlSetServicesTcpipParameters]
    TcpTimedWaitDelay = 30 # DWORD值,默认值 240s,可选范围:30-300 
    

    设置 KeepAliveTime

    • 如果应用程序没有实现超时检查,如 HttpClient,则超时检查会依赖于 TcpIp 所设置的 KeepAliveTime 项
    • TcpIp 超时检查默认情况下每 2 小时会执行一次------发送保持活动的数据包。
    [HKLMSystemCurrentControlSetServicesTcpipParameters]
    KeepAliveTime = 1800000 (Default = 7,200,000 milisecs)
    

    其他:

    • MaxBufferredReceiveBytes 和 RWIN(这块我未做处理,你可以试试)
      • 发送和接受数据的时候,会在 非分页池内存 中进行缓冲,如果传输数据量大的话,会消耗 非分页池内存。
      • 每一个 connection 所预分配的 非分页池 缓冲大小由 MaxBufferredReceiveBytes 和 RWIN 进行决定,取两者较小的数值。
    • NAT路由器/防火墙有可能会影响并发数,需差看下这些设备是否能抗住这么多的并发量,先排查瓶颈是否在这些设备上。。

    参考:

  • 相关阅读:
    GB/T 38879-2020 颗粒 粒度分析 彩色图像分析法
    GB/T 30431-2020 实验室气相色谱仪
    GB/T 50165-2020 古建筑木结构维护与加固技术标准
    GB/T 51405-2019 船厂总体设计标准
    GB/T 38922-2020 35kV及以下标准化继电保护装置通用技术要求
    GB/T 38953-2020 微电网继电保护技术规定
    GB/T 38886-2020 高温轴承钢等最新国家标准(2020-6-19)
    pytest_02(使用pychar执行pytest)
    pytest-01(安装pytest及运行规则)
    python-05(关于map函数的使用)
  • 原文地址:https://www.cnblogs.com/deepthought/p/11485045.html
Copyright © 2011-2022 走看看