• 九、性能测试之网络测试


    一、网络知识

    • 1、网络–接收方限制-网络连接配置
      sysctl:sysctl用于运行时配置内核参数,这些参数位于/proc/sys目录下。

    • linux系统启动,依次读取

      • /etc/sysctl.d/*.conf
      • /run/sysctl.d/*.conf
      • /usr/lib/sysctl.d/*.conf
    • sysctl --help 查看帮助

    • 2、我们通常说的网络,都是在tcp/ip协议族的基础上运作的,http协议,只是这个协议族中的一个

      • tcp协议:通过数据发送者和接收者相互回应对方发来的确认信息,可靠的进行数据传输
      • ip协议:指定数据发送的ip信息,以及通过路由器转发数据
    • 3、三次握手和四次挥手

      • tcp三次握手
        • 初次见面,握手(你好,你好,你好),确保数据100%准确到达
        • tcp组成:源地址、源端口、目的地址、目的端口
          • 源地址:发起方的地址(ip)
            • 肯定唯一,但可能不固定
          • 源端口:发起通信的端口
            • 每一次通信,都要占用1个端口
          • 目的地址:接收方(服务)的地址(ip)
          • 目的端口:接收方(服务)的端口
          • 端口:
            • 电脑最多 65535个端口
            • 1- 1023:公认端口,绑定在一些特定的服务器上,不能被使用,比如常见的 21、22、25、80、443
            • 1024-49151:注册端口,松散的绑定在一些服务上,比如8080、9800、3000
            • 49152~65535: 动态私有端口,约16800个
            • 一台电脑,一般能用于tcp通信的端口,大约是16400个
          • tcp源端口
            • 每一次通信,都会占用一个端口
              • 端口开启:发送方分配一个端口,数据从端口出去,进入网络
              • 端口关闭:端口开启的时间到了,关闭端口
            • 对于普通使用,完全没有问题
              • 但是性能测试,就可以会有问题
                • 性能测试,在发起方1台机器上,短时间发起大量请求,占用大量端口,导致端口不够用
                • 问题:address already in use:connect
                • 优化方向:
                  • 扩大端口范围: 1024 ~ 65535 达到6.4w端口
                  • 让端口占用的时长缩短: 去掉keepalive
                • 定位问题:
                  • 1、查看报错,根据接口返回进行分析
                    • windows(大多数情况,性能测试发起方系统为windows)
                    • netstat -ano | find "TCP" /i /c
                    • /i:搜索时不区分大小写
                    • /c:统计搜索结果
                    • 如果你发起方机器,这个命令的数值,约1.4w,可以肯定,你本地端口成为性能瓶颈
                    • linux/mac
                    • netstat -ano | grep "TCP" | wc -l
                    • ss -s
      • 二、判断带宽是否有问题

        • 1B=8bit
        • 1Mb/s=1024Kb/s=1024/8KB/s=128KB/s 我们可以在聚合报告查看吞吐率的发送和接收哪一个更接近这个的值,假如服务器是1mb/s带宽,如果这边的值已经接近128了,那带宽就是瓶颈
        • 2Mb/s=256Kb/s,4Mb/s=512KB/s 在这里插入图片描述
        • 1)查看本机带宽:
          • 1、ping目标服务器
            • 看时间 没有测试前的时间 与在进行性能测试时的 时间之间有没有明显的差异

            • 看丢包: 如果有丢包 肯定时网络瓶颈
              在这里插入图片描述

              • ps:有的服务器会禁ping命令
          • 2、查看网卡
            • 网络传输介质与终端设备连接的关隘
            • 发起方\源
              • 1.0Gbps=1024Mbps=1024/8MB/s=128MB/s
              • 200Mbps=100/8MB/s=12.5MB/s
            • 服务方\目的地
              • linux :ethtool 网卡名称| grep Speed
                在这里插入图片描述
              • 修改命令:ethtool -s 网卡名称 Speed 1000

      三、网络调优实战:当接口报地址被占用/连接超时

      • 原因1:是源端口不够用
      • HttpHostConnectException:Connect to 192.163.xxx:8080[192.163.****] Connection time out:connect

    在这里插入图片描述

    • 解决方案:
      • 1、我们尝试去掉keep-alive,发现没有根本解决问题,只是把报错时间延后

    在这里插入图片描述

    • 2、在windows和linux解决源端口的问题
    • 1)windows:修改2个注册表
      • 1、注册表:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service\Tcpic\Parameters]:修改里面的MaxUserPort:

        • 如有这个值,则设置为十进制的65534
        • 没有这个值,则新增DWORD,name为MaxUserPort,value为65534
        • 重启系统
      • 2、注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Sevices\Tcpio\Parameters: 修改里面的TcptimedWaitDelay

        • 如有,设置一个十进制是事件,单位秒(默认240s)
        • 没有,则新增DWORD,name为TcpTimedWaitDelay,value为十进制的时间30
        • 重启系统
          在这里插入图片描述
      • 2)Linux:修改端口范围
        • sysctl -a |grep net.ipv4.ip_local_port_range 查看当前系统的端口号

        • net.ipv4.ip_local_port_range = 32768 60999 定义了本地TCP/UDP端口范围,即可用的端口号范围 默认值为32768-60999,可用的约为2.8W
          在这里插入图片描述

        • 改端口范围:

          # 把端口号过滤,设置为1024至65535,并使其生效
          sysctl -w net.ipv4.ip_local_port_range="1024 65535"
          sysctl -p
          
          • 1
          • 2
          • 3
    • 原因2:服务器要调优
    • 解决方案:
      • os操作系统:
        • 1、sysctl:用于运行时配置内核参数
          • 这些参数位于/proc/sys目录下
          • linux系统启动,依次读取
            • /etc/sysctl.d/*.conf
            • /run/sysctl.d/*.conf
            • /usr/lib/sysctl/d/*.conf
          • sysctl --help
            在这里插入图片描述
          • 对配置进行修改:在这里插入图片描述
      • 2、ulimit:用于控制shell进程的资源(临时修改)
        • ulimit -a 查看当前所有的限制
          • 第一列:限制项
          • 第二列:该限制项目命令参数及单位
          • 第三列:目前限制值(unlimit表示不限制)
          • 注意:这个是临时修改限制值(立刻生效,但是系统重启后还原)
            在这里插入图片描述
      • 修改限制:ulimt -要修改的参数 -修改后的值
        在这里插入图片描述

    参数含义用法
    -ccore文件上限设定core文件的最大值,单位:块
    -d数据块大小程序数据块最大值:单位:KB
    -e调度优先级最高的优先级
    -f文件大小文件最大大小,单位:块
    -i待处理的信号最大待处理信号
    -l最大内存锁内存锁最大值,单位:KB
    -m最大内存大小可使用的内存最大值,单位:KB
    -n打开文件数量同一时间最多可开启的文件数量
    -p缓冲区大小指定管道缓冲区的大小,单位:512字节
    -qPOSIX消息队列队列最大长度,单位:字节
    -r时间优先级时间最高优先级
    -s栈大小栈的最大值,单位:KB
    -tCPU时间进程使用CPU的时间上限
    -u程序数量用户最多可开启的进程+线程数目
    -v虚拟内存可以使用的虚拟内存上限,单位:KB
    -x文件锁最多文件数量
    • 3、永久修改vim /etc/security/limits.conf
      • 使用演示(配置完了记得保存重启
        在这里插入图片描述

      • 上面的值具体是什么含义呢,来看下面吧:

        • 配置范围配置
          • *代表所有用户
          • %代表所有用户组在这里插入图片描述
        • 是否强制配置
          • soft:非强制限制
          • hard:强制限制
        • 具体选项配置
          • 我们一般最关注nofile(同一时间最多可开启的文件数量)
          • nproc (用户最多可开启的进程+线程数目)
            在这里插入图片描述
      • 应用连接池:
        • 1、应用连接池
        • 2、数据库连接池
      • 接收方(目的地)限制:

      • 查看某个进程允许打开的最大文件数

        • cat /proc/PID/limits

        • ps: 不管你是用 ulimit命令修改,还是 修改文件limits.conf, 你的应用程序要使用这个配置,那么你的应用程序需要重启
          在这里插入图片描述

        • cat /proc/sys/fs/file-max 查看系统允许打开的最大数量
          在这里插入图片描述

      • 检查系统配置是否成为瓶颈:查看某个进程当前已经打开的文件总数

        • lsof -p PID | wc -l 查看具体某个进程打开的文件数
        • lsof | wc -l 查看当前系统打开的总文件数量
          • 我们操作的时候可以先查看某个进程允许打开的最大文件数(cat /proc/PID/limits),然后再查看具体某个进程打开的文件数(lsof -p PID | wc -l),然后再进行修改(vim /etc/security/limits.conf
      • 禁ping
    # 禁ping
    sysctl -w net.ipv4.icmp_echo_ignore_all=1 修改
    sysctl -w net.ipv4.route.flush=1 刷新
    sysctl -p 生效
    
    # 开启
    sysctl -w net.ipv4.icmp_echo_ignore_all=0
    sysctl -w net.ipv4.route.flush=1
    sysctl -p
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    外汇天眼:如果你想成为前5%的交易者
    使用comicai绘制漫画
    865. 具有所有最深节点的最小子树(javascript)865. Smallest Subtree with all the Deepest Nodes
    链表Oj练习题 纯C语言
    理解ASP.NET Core - 限流(Rate Limiting)
    Redis企业版—比Redis开源更好用!
    2.2.1 嵌入式工程师必备软件
    RabbitMQ 5种工作模式介绍和Springboot具体实现
    关于计算机丢失MSVCP140.dll是什么意思?MSVCP140.dll缺失的5个解决方案分享
    信息增益,经验熵和经验条件熵——决策树
  • 原文地址:https://blog.csdn.net/qq_36792120/article/details/132774894