【测试沉思录】17. 性能测试中的系统资源分析之四:网络
创始人
2024-02-08 21:15:43
0

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

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

计算机网络是传输信息的媒介。我们常说的千兆网,是指网络带宽为 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 无法随着并发数量而增加的时候,我们就要考虑是不是服务本身的线程数量不足导致的。这个时候只要适当的增加线程数量即可,线程数量不可无限增加,数量越大消耗的资源就会越多,要根据测试情况进行调整,保证在一定的系统资源下,配置合理的线程数量,使得在服务稳定的前提下尽可能提升系统资源的利用率。

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

(完)

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

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...