【测试沉思录】17. 性能测试中的系统资源分析之四:网络
作者:馬海琴 編輯:畢小煩
計算機網(wǎng)絡(luò),就是通過光纜、電纜、電話線或無線通訊將兩臺以上的計算機互連起來的集合,包括廣域網(wǎng)、城域網(wǎng)、局域網(wǎng)和無線網(wǎng)。
計算機網(wǎng)絡(luò)是傳輸信息的媒介。我們常說的千兆網(wǎng),是指網(wǎng)絡(luò)帶寬為 1000Mbps,將 bit 換算成 Byte,理論上 1s 的傳輸速度為 125MB。
在對 HTTP 接口進行性能測試的過程中,有可能出現(xiàn)「Address already in use」「Address not available」等報錯,也可能出現(xiàn)明明 IO 和 CPU 都很低,TPS 確無法上升的情況,這就是有可能是網(wǎng)絡(luò)遇到了瓶頸。HTTP 接口是使用 TCP 協(xié)議進行傳輸,由四個組成原件:源地址、源端口、目的地址、目的端口。
- 源地址:發(fā)起通信的 IP 地址
- 源端口:發(fā)起通信的端口
- 目的地址:接受通信的 IP 地址
- 目的端口:接受通信請求的端口
在性能測試中,高并發(fā)場景下會占用大量的端口,如果這些端口沒有釋放就會出現(xiàn)端口不夠用的情況。
一. 常見問題:網(wǎng)絡(luò)帶寬不足
可以通過dstat -t -n查看網(wǎng)絡(luò)情況。
如下所示:
輸出結(jié)果中,net/total代表網(wǎng)絡(luò)的情況:
- recv:流量接收速度
- send:流量發(fā)送速度
在性能測試的過程中,我們需要監(jiān)控網(wǎng)絡(luò)的使用情況,一旦達到網(wǎng)絡(luò)帶寬的瓶頸(recv/send 接近帶寬,一般會略低于帶寬),也會影響我們性能測試的結(jié)果。我們需要考慮優(yōu)化傳輸數(shù)據(jù)量的大小,以降低帶寬的壓力。
二. 常見問題:端口不足
2.1 服務(wù)器端口不足
當(dāng)出現(xiàn)以下報錯信息時,可能是出現(xiàn)了端口不足導(dǎo)致的。
- Address already in use: connect
- Failed to connect to server
- Address not available
① 如何驗證是不是端口不足呢?
第一步:查看機器的可用端口數(shù)量
命令:
$ cat /proc/sys/net/ipv4/ip_local_port_range如:
第二步:統(tǒng)計當(dāng)前連接數(shù)
命令:
$ netstat -nat | awk '/^tcp/{++S[$NF]}END{for (a in S) print a,S[a]}'如:
狀態(tài)說明:
- CLOSED:無連接是活動的或正在進行
- LISTEN:服務(wù)器在等待進入呼叫
- SYN_RECV:一個連接請求已經(jīng)到達,等待確認(rèn)
- SYN_SENT:應(yīng)用已經(jīng)開始,打開一個連接
- ESTABLISHED:正常數(shù)據(jù)傳輸狀態(tài)
- FIN_WAIT1:應(yīng)用說它已經(jīng)完成
- FIN_WAIT2:另一邊已同意釋放
- ITMED_WAIT:等待所有分組死掉
- CLOSING:兩邊同時嘗試關(guān)閉
- TIME_WAIT:另一邊已初始化一個釋放
- LAST_ACK:等待所有分組死掉
當(dāng)連接數(shù)接近可用端口數(shù)量時,說明端口被耗盡了。
② 怎么解決端口不足的問題?
可以從以下兩個方面來解決:
方法一:增加可用端口
修改文件/etc/sysctl.conf,添加內(nèi)容net.ipv4.ip_local_port_range = 1024 65535,執(zhí)行命令/sbin/sysctl -p使配置生效。
如:
方法二:提升端口回收速度
在文件/etc/sysctl.conf添加以下內(nèi)容:
# 表示如果套接字由本端要求關(guān)閉,這個參數(shù)決定了它保持在FIN-WAIT-2狀態(tài)的時間 net.ipv4.tcp_fin_timeout = 30# 表示當(dāng)keepalive起用的時候,TCP發(fā)送keepalive消息的頻度。缺省是2小時,改為20分鐘 net.ipv4.tcp_keepalive_time = 1200# 1 表示開啟SYN Cookies。當(dāng)出現(xiàn)SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認(rèn)為0,表示關(guān)閉 net.ipv4.tcp_syncookies = 1# 1 表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)為0,表示關(guān)閉 net.ipv4.tcp_tw_reuse = 1# 1 表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認(rèn)為0,表示關(guān)閉 net.ipv4.tcp_tw_recycle = 1# 表示SYN隊列的長度,默認(rèn)為1024,加大隊列長度為8192,可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù) net.ipv4.tcp_max_syn_backlog = 8192# 表示系統(tǒng)同時保持TIME_WAIT套接字的最大數(shù)量,如果超過這個數(shù)字,TIME_WAIT套接字將立刻被清除并打印警告信息,默認(rèn)為 180000 net.ipv4.tcp_max_tw_buckets = 5000最后執(zhí)行命令/sbin/sysctl -p使配置生效。當(dāng) tpc 連接中 TIME_WAIT 狀態(tài)的數(shù)量較多時,該方法的效果將會非常明顯。
如果是壓測機的端口不足,除了使用以上方法來提升壓測機的性能,更直接的方式是發(fā)起請求的時候不要使用 KeepAlive 模式(告訴 WEB 服務(wù)器或者代理服務(wù)器,在完成本次請求的響應(yīng)后,斷開連接,不要等待本次連接的后續(xù)請求了)。如果還是端口不足,那就需要增加壓測機的數(shù)量來解決了。
如果是被測服務(wù)所在的機器端口不足,一般不建議修改機器的配置(建議與線上保持一致),如果要修改,需要與開發(fā)和運維一起評估修改配置的利弊以及可能存在的風(fēng)險。
2.2 服務(wù)內(nèi)部端口不足
查看當(dāng)前服務(wù)的端口連接數(shù)量:
netstat -ane|grep ESTABLISHED |grep 'ip:port'|wc -l當(dāng)測試過程中,該值增長到一定數(shù)量就不再變化,測試結(jié)束,值立即下降。當(dāng)服務(wù)器所有資源都未達到瓶頸,而 tps 無法隨著并發(fā)數(shù)量而增加的時候,我們就要考慮是不是服務(wù)本身的線程數(shù)量不足導(dǎo)致的。這個時候只要適當(dāng)?shù)脑黾泳€程數(shù)量即可,線程數(shù)量不可無限增加,數(shù)量越大消耗的資源就會越多,要根據(jù)測試情況進行調(diào)整,保證在一定的系統(tǒng)資源下,配置合理的線程數(shù)量,使得在服務(wù)穩(wěn)定的前提下盡可能提升系統(tǒng)資源的利用率。
關(guān)于系統(tǒng)資源的分析就到這里了,關(guān)于分析的命令其實有很多,本系列文章只是列舉了常用的一小部分,在面對真實的問題時,可以根據(jù)需要使用更便捷的方式。在實際的生產(chǎn)中,我們更多的是會使用圖形監(jiān)控服務(wù)資源的使用,也會對很多異常場景設(shè)置報警提醒和現(xiàn)場留存,這對分析和發(fā)現(xiàn)問題都有很大的幫助。
(完)
如果文章對你有幫助,記得留言、點贊、加關(guān)注哦!
總結(jié)
以上是生活随笔為你收集整理的【测试沉思录】17. 性能测试中的系统资源分析之四:网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数理统计 - 圆环上随机取3个点组成一个
- 下一篇: python批量处理图片属性_pytho