网络性能瓶颈分析,让我来说给你听!

news2024/11/28 17:41:49

在性能测试中,谈到网络问题,其实,在没有特别说明的情况下,我们一般讲的都是 HTTP 协议下的网络瓶颈问题,那,对于这个问题,我们如何来分析呢?计算机中的网络,跟我们现实生活中的交通网络,其实也是一个道理,可以类比。

你从住的地方,到你公司上班,人的位置,在整个过程中发生了移动,就相当于我们网络中一个数据包进行了传输,我们可以这样类比,来剖析下这个移动过程:

首先,住的地方是已知的,住的很豪华,有非常多的门,你要去上班,从任意一个门出来都可以,但是门再多,它也是有一定数量的对吧。

从门出来,你就会想,用什么样的交通工具,如果使用 4 个轮子的车子,那接下来就会选择道路,因为不同的道路,拥堵情况可能不一样。

现在,你开车到了公司楼下,你又会选择从哪个门进公司。如果时间紧,人又多,一窝蜂都挤到一个门,你小身板,可能就挤不进去,所以你可能会挑一个足够宽让你进去的门。

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337&vd_source=488d25e59e6c5b111f7a1a1a16ecbe9a

对吧。这个过程,相信大家都能理解。
接下来,我们根据这个过程,分析下,影响我们上班过程的瓶颈有哪些?

门很多,但是总有个数量,万一门不够,是不是就出不去了?所以,这个出口门,可能会是个瓶颈。

交通工具和道路。不同的交通工具,速度不一样;道路等级、宽窄、流通量都会影响通行速度,都可能是瓶颈。

公司入口门,如果大家都在同一时间点从门口进来,是不是就会要排队,或者进不来,那这个入口门,也可能会是瓶颈。

进入公司后,要进入办公室,办公室的门宽度,是不是也可能是个瓶颈。

现在,我们知道了影响我们上班是否迟到到的瓶颈了,其实,在我们网络性能分析中,也是类似的。

用 HTTP 协议来规范网络通信,用 TCP\UDP 进行数据传输,它就是我们上班的交通工具。

TCP 连接有四个组成元件,源地址、源端口、目的地址、目的端口。源地址,就是你自己机器的 ip,相当于你住的地址,一般都是唯一的;源端口,就是发起通信的端口,就是你从家里出来的门,你发起一次通信,就会要先找一个端口,打开端口,从端口出去,然后关闭端口。这个过程,作为常规的使用,完全没有问题,所以平常大家都不关注这个。

但是,端口是很多,也耐不住你使劲的‘造’啊(就像你家很豪华,门再多,也耐不住你浪费啊。)在我们性能测试时,就是使劲的‘造’,会打开大量的端口,处于占用状态,没有获得到端口的就出不去,从而就可能出现,端口不够用的情况。

ok,现在明白网络性能的第一个可能的瓶颈是什么了吧!端口不够用!!

1、源地址端口不够用

大家在公司日常用的更多的电脑就是 Windows,那 windows 的电脑端口有多少呢?这个要说原理和理论,估计很多同学就会蒙圈了,所以就不大谈理论了。

 我们可以先简单理解为端口总共有 65535 个,其中

1、0~1023(共 1024 个),为公认端口,紧密的绑定在一些特定服务上,如 21 端口就是 FTP 服务,80 端口就是 HTTP 服务;

2、1024~49151(共 48127 个),为注册端口,松散的绑定于一些服务,如 8080 端口常常就用于绑定 Tomcat 服务;

3、49152~65535(共 16384 个),为动态或私有端口。

看了这样一组数据,知道在做性能测试时,你本机 TCP 通信最多能消耗多少个端口了吗?

—— 65535 ?

—— 16384 ?

哈哈,都不对。

实际上,一台电脑 TCP 通信端口应该是在 16400+ 个,当然也不会超过太多。为什么不是 16384,而是这样一个值呢?

因为‘注册端口’中有部分端口,也会用于 tcp 通信。所以在性能测试时,最大可用端口范围会稍微大一点。

看到这,是不是就特别想知道怎么查看 Windows 系统中,TCP 端口连接占用情况呢?

那,接下来就给大家讲解一个非常简单的命令:

Windows 系统查看当前 TCP 连接数

图片

Linux 呢?是你的菜吗?

netstat -ano |grep 'tcp' | wc -l 这个知道吗?

好,现在已经知道如何实时查看了,那实际执行性能测试,如果出现源地址端口不够用,会出现什么样的问题表现呢?

Address already in use: connect

图片

对于这样的错,你见过吗?

相信只要做过性能测试的人员,或多或少都遇到过吧!

虽然出现 Address already in use: connect 这个问题,原因很多,但源地址端口不够用,就是其中一个常见的原因

我们可以尝试如下方法调优:

第一个调优办法:

如果是使用 jmeter 进行性能测试,出现上述报错,可以直接去掉 http 取样器的 【使用 KeepAlive】 复选勾。

第二个调优办法:

  • 打开系统的注册表,找到 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters], 看下右侧的配置信息,有没有 MaxUserPort 配置项

  • 有,则修改值为 65534(十进制),确定

  • 没有,则新增一个 DWORD, name 为 MaxUserPort, value 为 65534(十进制),确定

  • 重启系统

完成这一步,我们已经知道,我们的系统当前端口可用范围已经达到最大。

接下来,我们还需要知道,端口被使用后,如果我们能及时回收,再利用是不是能提高端口利用率,这样是不是就变相增加了端口了呢?

所以,第二个调优方法就是,释放、回收端口。

第三个调优办法:

  • 打开系统的注册表,找到 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters], 看下右侧的配置信息,有没有 TcpTimedWaitDe 配置项

  • 有,则修改值为 10(十进制,10 秒),确定

  • 没有,则新增一个 DWORD, name 为 TcpTimedWaitDe, value 为 10(十进制),确定

  • 重启系统

完成了这两步,我们就已经完成了发送方的网络调优。

现在,我们已经知道如何解决从家里出来可能的问题了,接下来,就是开车,去上班。

把车开出来,先经过一段引路,然后才能进入主干道,主干道通行一段距离后,下主干道,进入一段公司引路,再进入公司。

对吧!

其实,我们的网络数据传输,也可以这样类比,网络数据包要通过网卡,使用网络传输介质(如网线)在网络中进行传输,进过多次周转,找到目标服务器,通过服务器网卡,进入服务器内部。

同样的,我们能分析出:

  • 发送方的网卡速率有 10m、百兆、G 兆网卡,如果网卡不行,可能成为瓶颈。

  • 传输介质,有线、无线,有线的介质(如双绞线、同轴电缆、光纤)、路由的复杂度(如国内、国外)等等,都会影响传输速度,这个有可能成为瓶颈。

  • 服务器接收数据的网卡速率,照样也可能成为瓶颈

有这么多可能的瓶颈,那我们怎么判定网络传输有没有问题呢?这个相信大家都知道怎么做。

图片

2、网络传输通道瓶颈

Ⅰ、查看发起请求的机器网卡速率。

如果是 Windows10 电脑,可以在 “网络连接” > 选中机器网卡,右键‘状态’ > 查看弹窗中的‘速度’

图片

Ⅱ、 检查网络传输路由,Windows 下执行:

图片

跟踪完成。第 1 列,表示路由节点数量;第 2~4 列,表示连接到每个路由节点的速度、返回速度、多次连接反馈的平均值;最后的 ip,代表路由地址。

从这个就能看出在哪个节点时间长,可能有优化空间。

Ⅲ、数据传输到服务器了,现在要查看服务器的网卡信息。

图片

通过这个命令,我们可以看到 ens33 这个网卡,目前设置的速度为 100Mb/s,这个已经非常大了,如果这个值过低,可能就需要改大,可以执行:

图片

好了,现在我们知道如何查看确认我们数据传输通道的问题了。

显然,我们对于这个环节出现瓶颈,办法不是很多。就像我们上班的路,我们能在引路上想些办法,规划好行车路线,但是我们对于主干道,几乎无能为力。

3、目的地址端口瓶颈

图片

这张图,是不是完全没有看懂什么意思?

其实我们的请求在服务器上,就是类似图片这样,非常多的请求来到服务器,最后都是通过某个端口,或者几个端口真正获取响应数据。

首先,我们得知道,一台机器,再强,也只能接收一定量的请求,这个数量是有最大值的,我们可以通过:

Linux 机器上查看允许的连接配置

图片

如果觉得这个配置的‘max user process' 和 'open files'太小,可以修改 /etc/security/limits.conf

图片

修改完后, max user processes 就会改成 32768, open files 值变更为 16000

做完这波操作,就相当于你对公司的入口门进行了设置,根据你的需要调整了门的宽度。

接下来,就是要进入你的办公室了。

4、服务内部端口瓶颈

首先我们可以查看下你当前服务的端口连接数量:

图片

这个命令执行完后,你会获得一个数值,这个数量到达一定的峰值之后,就不会再增长了,当你测试结束的时候,这个峰值就会逐步降低。

这是怎么回事呢?

其实,这就是我们服务的连接数量,而这个数量,是可以配置的。

如果你的服务是 tomat,可以在 Tomcat 的 conten.xml 中,配置

图片

修改 maxThreads 的值,就是在修改我们的最大峰值。

注意,maxThreads 不是无限大的, 越大,相应的消耗的资源也会越多。

好了,这就是我们常常进行网络性能瓶颈分析的几个方面。你是不是都已经掌握了呢?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1174893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP32S3入手体验测试

ESP32S3入手体验测试 🔖所入手的型号是YD-ESP32-S3 N16R8,该款和乐鑫官方推出的ESP32-S3-DevKitC-1配置差不多。 🎈乐鑫官方介绍:ESP32-S3-DevKitC-1 v1.1 🔰两者采用的模组:ESP32-S3-WROOM-1 和ESP32-S3-WROOM-1U模组…

再见了,提示~ 谷歌发布自适应提示方法,从此告别提示工程!

夕小瑶科技说 原创 作者 | 谢年年、ZenMoore 大模型虽好,但却存在着一个恼人的问题:大模型回答得好不好,取决于我们问题问得怎么样。一个好的、详细的问题往往可以产生惊人的效果... 所以... ChatGPT 问世之后,最火的书可能不是…

文心一言 VS 讯飞星火 VS chatgpt (128)-- 算法导论11.1 3题

三、用go语言,试说明如何实现一个直接寻址表,表中各元素的关键字不必都不相同,且各元素可以有卫星数据。所有三种字典操作(INSERT、DELETE和SEARCH)的运行时间应为O(1)(不要忘记 DELETE 要处理的是被删除对象的指针变量,而不是关键…

没想到这么齐全!这份 Python 实战干货yyds

今天我分享一些Python学习神器资料,有需要的小伙文末自行免费领取。 1.200Python练手案例: 2.Python全套视频教程等: 3.浙大Python学习套装: * 4.Python实战案例: 5.Pandas学习大礼包 6.学习手册大礼包 Python知识…

cocosCreator微信小游戏 之 登录流程(三)

creator版本: 3.8.0 语言: TypeScript 环境: Mac 流程 微信小游戏在微信平台中运行,第一步操作就是登录。在登录之后才能: 更方便的获取微信提供的用户身份标识更方便的验证数据传递的合法性 在微信平台中&#x…

如何在苹果Mac系统设置中查看Wi-Fi密码?

在 Mac 上查找保存的 Wi-Fi 密码的最简单方法之一是从系统设置内的高级 Wi-Fi 首选项页面。您可以通过下面的方式访问此页面来查找您保存的 Wi-Fi 密码。 1.在 Mac 上,选取「苹果菜单」选择「系统设置」。 2.从侧边栏中选择「Wi-Fi」,单击「高级」。 3.…

Git同时配置Gitee和GitHub

Git同时配置Gitee和GitHub 一、删除原先ssh密钥二、生成密钥 这里的同时配置是针对于之前配置过单个gitee或者github而言的,如果需要看git从安装开始的配置,则可以看这一篇文章 git安装配置教程 一、删除原先ssh密钥 在C盘下用户/用户名/.ssh文件下找到…

golang实现极简todolist

ToDoList 最近跟着qimi老师做了一个ToDoList,我做的GitHub地址贴在这里,但由于前端出了点问题,所以都是用postman进行测试 原项目地址 部分功能展示 删除代办 查找代办 下面给出思路 思路 其实这是一个很简单的增删改查的实现&#xff…

Linux命令--mkdir创建目录的方法

原文网址&#xff1a;Linux命令--mkdir创建目录的方法_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Linux创建目录命令--mkdir的用法。 格式 mkdir [选项] 目录… -m, –mode模式&#xff0c;设定权限<模式> (类似 chmod)&#xff0c;而不是 rwxrwxrwx 减 umask-p, --p…

【java学习—十三】处理流之二:转换流(2)

文章目录 1. 相关概念2. 转换输入流3. 转换输出流 1. 相关概念 转换流提供了在字节流和字符流之间的转换。 Java API 提供了两个转换流&#xff1a;     InputStreamReader 和 OutputStreamWriter     当字节流中的数据都是字符时&#xff0c;转成字符流操作更高效。…

Python---字符串中的查找方法--rfind()与rindex()方法----括号里是要获取的字符串

r right&#xff0c;代表从右开始查找 基本语法&#xff1a; 字符串序列.rfind(子串) 字符串序列.rindex(子串) 强调&#xff1a; rfind()方法 与 rindex()方法 适合于查找子串在字符串中出现了多次的情况 rfind()方法 案例&#xff1a; 有一个文件名称叫20210310…

深度学习之基于Tensorflow卷积神经网络花卉识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习是一种机器学习方法&#xff0c;它通过模拟人脑神经网络的结构和功能来实现对数据的自动分析和学习。卷积神…

差生文具多之(一)eBPF

前言 在问题排查过程中, 通常包含: 整体观测, 数据采集, 数据分析这几个阶段. 对于简单问题的排查, 可以跳过前两个步骤, 无需额外收集数据, 直接通过分析日志中的关键信息就可以定位根因; 而对于复杂问题的排查, 为了对应用的行为有更完整的了解, 可以通过以下形式收集更多的…

程序员成长树

- 10年以后我在做什么&#xff1f; 成为项目负责人&#xff08;管理事、管理人&#xff09; - 如何处理同事的关系: 平时生活中最简单的一句问候&#xff0c;闲暇时间的聊天了解&#xff0c;互帮互助 - miss yang: - 1、软件UI设计 - 2、需求分析 - 3、协调推进任务的安排 …

linux 驱动——字符设备驱动(自动生成设备节点文件)

文章目录 字符设备驱动字符设备 APP生成 dev 节点的原理配置内核自动创建设备节点模块使用 字符设备驱动 #include "linux/device/class.h" #include "linux/export.h" #include "linux/uaccess.h" #include <linux/types.h> #include &l…

10 DETR 论文精读【论文精读】End-to-End Object Detection with Transformers

DETR 这篇论文&#xff0c;大家为什么喜欢它&#xff1f;为什么大家说它是一个目标检测里的里程碑式的工作&#xff1f;而且为什么说它是一个全新的架构&#xff1f; 大家好&#xff0c;今天我们来讲一篇 ECC V20 的关于目标检测的论文。它的名字想必大家都不陌生&#xff0c;也…

Python---字符串中的查找方法--index()--括号里是要获取的字符串

index()方法其功能与find()方法完全一致&#xff0c;唯一的区别在于当要查找的子串没有出现在字符串中时&#xff0c;find()方法返回-1&#xff0c;而index()方法则直接 报错。 find()方法相关链接&#xff1a;Python---字符串中的查找方法--find&#xff08;&#xff09;--括…

排序——冒泡排序

冒泡排序的基本思想 从前往后&#xff08;或从后往前&#xff09;两两比较相邻元素的值&#xff0c;若为逆序&#xff08;即 A [ i − 1 ] < A [ i ] A\left [ i-1\right ]<A\left [ i\right ] A[i−1]<A[i]&#xff09;&#xff0c;则交换它们&#xff0c;直到序列…

【漏洞复现】Nginx_(背锅)解析漏洞复现

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 1.5、深度利用GetShell 1.1、漏洞描述 这个漏洞其实和代码执行没有太大关系&…

基础Redis-Java客户端操作介绍

Java客户端操作介绍 2.基础-Redis的Java客户端a.介绍b.Jedisc.Jedis连接池d.SpringDataRedise.SpringDataRedis的序列化方式f.StringRedisTemplate 2.基础-Redis的Java客户端 a.介绍 Jedis 以Redis命令作为方法名称&#xff0c;学习成本低&#xff0c;简单实用。但是Jedis实例…