【测试沉思录】17. 性能测试中的系统资源分析之四:网络
作者:馬海琴 編輯:畢小煩
計算機網絡,就是通過光纜、電纜、電話線或無線通訊將兩臺以上的計算機互連起來的集合,包括廣域網、城域網、局域網和無線網。
計算機網絡是傳輸信息的媒介。我們常說的千兆網,是指網絡帶寬為 1000Mbps,將 bit 換算成 Byte,理論上 1s 的傳輸速度為 125MB。
在對 HTTP 接口進行性能測試的過程中,有可能出現「Address already in use」「Address not available」等報錯,也可能出現明明 IO 和 CPU 都很低,TPS 確無法上升的情況,這就是有可能是網絡遇到了瓶頸。HTTP 接口是使用 TCP 協議進行傳輸,由四個組成原件:源地址、源端口、目的地址、目的端口。
- 源地址:發起通信的 IP 地址
- 源端口:發起通信的端口
- 目的地址:接受通信的 IP 地址
- 目的端口:接受通信請求的端口
在性能測試中,高并發場景下會占用大量的端口,如果這些端口沒有釋放就會出現端口不夠用的情況。
一. 常見問題:網絡帶寬不足
可以通過dstat -t -n查看網絡情況。
如下所示:
輸出結果中,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如:
第二步:統計當前連接數
命令:
$ netstat -nat | awk '/^tcp/{++S[$NF]}END{for (a in S) print a,S[a]}'如:
狀態說明:
- 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使配置生效。
如:
方法二:提升端口回收速度
在文件/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 無法隨著并發數量而增加的時候,我們就要考慮是不是服務本身的線程數量不足導致的。這個時候只要適當的增加線程數量即可,線程數量不可無限增加,數量越大消耗的資源就會越多,要根據測試情況進行調整,保證在一定的系統資源下,配置合理的線程數量,使得在服務穩定的前提下盡可能提升系統資源的利用率。
關于系統資源的分析就到這里了,關于分析的命令其實有很多,本系列文章只是列舉了常用的一小部分,在面對真實的問題時,可以根據需要使用更便捷的方式。在實際的生產中,我們更多的是會使用圖形監控服務資源的使用,也會對很多異常場景設置報警提醒和現場留存,這對分析和發現問題都有很大的幫助。
(完)
如果文章對你有幫助,記得留言、點贊、加關注哦!
總結
以上是生活随笔為你收集整理的【测试沉思录】17. 性能测试中的系统资源分析之四:网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数理统计 - 圆环上随机取3个点组成一个
- 下一篇: python批量处理图片属性_pytho