【测试沉思录】17. 性能测试中的系统资源分析之四:网络

news2024/11/25 12:35:45

作者:马海琴 编辑:毕小烦

计算机网络,就是通过光缆、电缆、电话线或无线通讯将两台以上的计算机互连起来的集合,包括广域网、城域网、局域网和无线网。

计算机网络是传输信息的媒介。我们常说的千兆网,是指网络带宽为 1000Mbps,将 bit 换算成 Byte,理论上 1s 的传输速度为 125MB

在对 HTTP 接口进行性能测试的过程中,有可能出现「Address already in use」「Address not available」等报错,也可能出现明明 IO 和 CPU 都很低,TPS 确无法上升的情况,这就是有可能是网络遇到了瓶颈。HTTP 接口是使用 TCP 协议进行传输,由四个组成原件:源地址、源端口、目的地址、目的端口。

  • 源地址:发起通信的 IP 地址
  • 源端口:发起通信的端口
  • 目的地址:接受通信的 IP 地址
  • 目的端口:接受通信请求的端口

在性能测试中,高并发场景下会占用大量的端口,如果这些端口没有释放就会出现端口不够用的情况。

一. 常见问题:网络带宽不足

可以通过dstat -t -n查看网络情况。

如下所示:

img

输出结果中,net/total代表网络的情况:

  • recv:流量接收速度
  • send:流量发送速度

在性能测试的过程中,我们需要监控网络的使用情况,一旦达到网络带宽的瓶颈(recv/send 接近带宽,一般会略低于带宽),也会影响我们性能测试的结果。我们需要考虑优化传输数据量的大小,以降低带宽的压力

二. 常见问题:端口不足

2.1 服务器端口不足

当出现以下报错信息时,可能是出现了端口不足导致的。

  • Address already in use: connect
  • Failed to connect to server
  • Address not available

① 如何验证是不是端口不足呢?

第一步:查看机器的可用端口数量

命令:

$ cat /proc/sys/net/ipv4/ip_local_port_range

如:

img

第二步:统计当前连接数

命令:

$ netstat -nat | awk '/^tcp/{++S[$NF]}END{for (a in S) print a,S[a]}'

如:

img

状态说明:

  • CLOSED:无连接是活动的或正在进行
  • LISTEN:服务器在等待进入呼叫
  • SYN_RECV:一个连接请求已经到达,等待确认
  • SYN_SENT:应用已经开始,打开一个连接
  • ESTABLISHED:正常数据传输状态
  • FIN_WAIT1:应用说它已经完成
  • FIN_WAIT2:另一边已同意释放
  • ITMED_WAIT:等待所有分组死掉
  • CLOSING:两边同时尝试关闭
  • TIME_WAIT:另一边已初始化一个释放
  • LAST_ACK:等待所有分组死掉

当连接数接近可用端口数量时,说明端口被耗尽了。

② 怎么解决端口不足的问题?

可以从以下两个方面来解决:

方法一:增加可用端口

修改文件/etc/sysctl.conf,添加内容net.ipv4.ip_local_port_range = 1024 65535,执行命令/sbin/sysctl -p使配置生效。

如:

img

方法二:提升端口回收速度

在文件/etc/sysctl.conf添加以下内容:

# 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
net.ipv4.tcp_fin_timeout = 30

# 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟
net.ipv4.tcp_keepalive_time = 1200

# 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
net.ipv4.tcp_syncookies = 1

# 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1

# 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1

# 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数
net.ipv4.tcp_max_syn_backlog = 8192

# 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息,默认为 180000
net.ipv4.tcp_max_tw_buckets = 5000 

最后执行命令/sbin/sysctl -p使配置生效。当 tpc 连接中 TIME_WAIT 状态的数量较多时,该方法的效果将会非常明显。

如果是压测机的端口不足,除了使用以上方法来提升压测机的性能,更直接的方式是发起请求的时候不要使用 KeepAlive 模式(告诉 WEB 服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了)。如果还是端口不足,那就需要增加压测机的数量来解决了。

如果是被测服务所在的机器端口不足,一般不建议修改机器的配置(建议与线上保持一致),如果要修改,需要与开发和运维一起评估修改配置的利弊以及可能存在的风险。

2.2 服务内部端口不足

查看当前服务的端口连接数量:

netstat -ane|grep ESTABLISHED |grep 'ip:port'|wc -l

当测试过程中,该值增长到一定数量就不再变化,测试结束,值立即下降。当服务器所有资源都未达到瓶颈,而 tps 无法随着并发数量而增加的时候,我们就要考虑是不是服务本身的线程数量不足导致的。这个时候只要适当的增加线程数量即可,线程数量不可无限增加,数量越大消耗的资源就会越多,要根据测试情况进行调整,保证在一定的系统资源下,配置合理的线程数量,使得在服务稳定的前提下尽可能提升系统资源的利用率。

关于系统资源的分析就到这里了,关于分析的命令其实有很多,本系列文章只是列举了常用的一小部分,在面对真实的问题时,可以根据需要使用更便捷的方式。在实际的生产中,我们更多的是会使用图形监控服务资源的使用,也会对很多异常场景设置报警提醒和现场留存,这对分析和发现问题都有很大的帮助。

(完)

如果文章对你有帮助,记得留言、点赞、加关注哦!

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

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

相关文章

openssl中SM2、SM3、SM4使用实例

目录 openssl的版本如下: SM3使用实例 1. SM3的扎凑实例 SM2使用实例 1. 生成SM2密钥对 2.查看SM2密钥对 3.生成自签名证书 4.查看证书详情 5.私钥签名消息 6.证书验证消息签名 SM4 使用实例 openssl的版本如下: SM3使用实例 SM3是中华人民共…

前端框架 Nextjs 实现React SEO优化

目录 一、Nextjs框架创建React项目 二、路由的使用 1、静态路由 2、动态路由 3、Link路由跳转 4、Api路由 5、Api动态路由 三、Nextjs中加载js脚本 四、Nextjs中加载图片 五、Nextjs的公共布局 六、Pages的其他特性 一、Nextjs框架创建React项目 快速入门 | Next.…

YOLOv5~目标检测模型精确度

还是yolo5的基础啊~~ 一些关于目标检测模型的评估指标:IOU、TP&FP&FN&TN、mAP等,并列举了目标检测中的mAP计算。 指标评估(重要的一些定义) IOU 也称重叠度表示计算预测回归框和真实回归框的交并比,计算公式如下: TP&FP&FN&…

2022CTF培训(二)Hook进阶反调试

附件下载链接 Hook进阶 更精准的 Inline Hook 要求 实现防止任务管理器对某进程自身的结束要求不影响任务管理器结束其它进程的功能 Dll 注入程序编写 提权 主要过程如下: 首先,程序需要调用OpenProcessToken函数打开指定的进程令牌,并获取TOKEN…

【架构设计】作为架构师你应该掌握的画图技术

1.前言 大家知道,架构的过程其实就是建模的过程,那自然离不开架构图。那么,我们先来看几个问题。 (1)什么是架构图? 架构图 架构 图,用图的形式把系统架构展示出来,配上简单的文…

Rust学习笔记——安装、创建、编译、输入输出

目录 一.安装 二.创建 三.编译 四.输入输出 (一).输出hello world (二).输入 一.安装 Rust Programming Language (rust-lang.org),这是Rust官网。 直接下载自己对应系统版本即可,小编是linux版。 下…

ARP协议map4(3层网络层的协议)

数据来源 一、广播与广播域概述 1、广播域广播域 广播:将广播地址做为目标地址的数据帧 广播域:网络中能接收到同一个广播所有节点的集合(广播域越小越好,这样通信效率更高) 下图每个圈都是一个广播域,说…

通关算法题之 ⌈数组⌋ 上

滑动窗口 3. 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 输入: s "abcabcbb" 输出: 3 这就是变简单了,连 need 和 valid 都不需要,而且更新窗口内数据也只需要简单的更新计数器 …

(续)SSM整合之SSM整合笔记(ContextLoaderListener)(P179-188)

一 准备工作 1 新建模块ssm com.atguigu.ssm 2 导入依赖 <packaging>war</packaging><properties><spring.version>5.3.1</spring.version> </properties><dependencies><dependency><groupId>org.springframew…

Day10--初步实现自定义tabBar的效果

承接上文配置信息之后。 1.添加tabBar代码文件 我的操作&#xff1a; 1》在文件区新建一个custom-tab-bar文件夹 2》并在其中新建一个index组件 3》文件区展示图 4》最终的效果图&#xff1a; **************************************************************************…

界面组件DevExpress Reporting v22.1亮点 - 报表设计器功能全面升级

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。 DevExpress Reporting v22.1版本已正式发布&am…

数据结构之二叉树(前提知识)

文章目录前言**一、树****二、树的相关概念****节点的度****叶节点****分支节点****子节点****父节点****兄弟节点****树的度****节点的层****树的高度****祖先****子孙****森林****三、树的表示****孩子表示法****左孩子右兄弟法****双亲表示法****四、树在实际中的应用****总…

iPhone/iPad屏幕投屏镜像到PC或Mac上面教程分享

AirServer是一款Mac应用程序&#xff0c;可将AirPlay / AirTunes的音频&#xff0c;视频&#xff0c;照片&#xff0c;幻灯片和镜像接收功能添加到Mac电脑。它可以实现将iPhone手机或Mac电脑上的媒体文件以及其他操作投射到Mac电脑上。使用AirServer&#xff0c;可以从Mac&…

如何利用DGL官方库中的rgcn链接预测代码跑自己的数据集(如何在DGL库的链接预测数据集模块定义自己的数据集类)

最近在忙我的省创&#xff0c;是有关于知识图谱的&#xff0c;其中有一个内容是使用rgcn的链接预测方法跑自己的数据集&#xff0c;我是用的dgl库中给出的在pytorch环境下实现rgcn的链接预测的代码&#xff0c;相关链接贴在这里&#xff1a; dgl库中关于rgcn的介绍文档 dgl库…

联盟快应用-如何进行测试?

官方文档&#xff1a;快应用-无需安装&#xff0c;即点即用-厂商联盟官方网站 什么是快应用&#xff1f; 可以简单理解为是另一种小程序。 快应用是一种新的应用形态&#xff0c;以往的手机端应用主要有两种方式&#xff1a;网页、原生应用&#xff1b;网页无需安装&#xff…

阻塞车间调度

阻塞车间调度 当前机器上的作业处理必须保留在该机器上&#xff0c;直到下一台机器可用于处理为止。也就是说如果该作业要执行的下一个工序的机器被使用&#xff0c;则该机器必须被占用。 n个作业必须在m个机器f个工厂上进行处理&#xff0c;在每一个工厂中连续机器之间没有缓…

Android11 framework Handler

Android11 framework Handler引言Handler工作流程MessageQueue主要函数Looper主要函数思考1.一个线程有几个handler&#xff0c;有几个looper2.为什么handler会有内存泄漏3.如果想要在子线程new Handler怎么做&#xff1f;4.子线程中的loop如果消息队列中没有消息处理的时候怎么…

深入底层学git:目录中包含的秘密

1.Git简介 Git具有最优的存储能力&#xff0c;在没有远端git服务器的情况下&#xff0c;git本地就可以独立作为版本管控系统&#xff0c;这其中.git裸仓库中起了关键作用&#xff0c;那么我们一起来看看.git下都放了哪些文件。 打开Git Bash&#xff0c;切换到项目目录&#x…

王道考研——操作系统(第二章 进程管理)(进程;线程)

一、进程的概念、组成、特征 进程的概念 进程的组成——PCB 进程的组成——程序段、数据段 知识滚雪球&#xff1a;程序是如何运行的&#xff1f; 进程的组成 进程的特征 知识回顾与重要考点 二、进程的状态与转换 进程的状态——创建态、就绪态 进程的状态——运行态 进程的…

刷题日记【第十二篇】-笔试必刷题【洗牌+MP3光标位置+年终奖+迷宫问题】

洗牌【编程题】 import java.util.*;public class Main {// 左: i --> 2*i;// 右: in --> 2*i 1;private static void playCard(int[] cards, int n, int k ) {for (int i 0; i < k; i) {//一次洗牌的顺序int[] newCards new int[cards.length];//遍历编号为0-n-1…