1. 程式人生 > >基於websocket協議的壓力測試

基於websocket協議的壓力測試

背景

最近客戶端實現了一個基於websocket的訊息推送功能:長連線網路開關下發開後啟動,然後保持連結,每隔15分鐘發一次心跳包,伺服器有資料時直接下發生效,因此需要對伺服器進行壓測。本次通過寫python指令碼的方法模擬併發進行壓力測試,相關測試方法如下~

什麼是websocket協議

WebSocket是一種在單個TCP連線上進行全雙工通訊的協議。WebSocket通訊協議於2011年被IETF定為標準RFC 6455,並由RFC7936補充規範。WebSocket使得客戶端和伺服器之間的資料交換變得更加簡單,允許服務端主動向客戶端推送資料。在WebSocketAPI中,瀏覽器和伺服器只需要完成一次握手,兩者之間就直接可以建立永續性的連線,並進行雙向資料傳輸。

測試場景

1.併發建立長連線,3min內建立連線22w,總連線數維持在22w左右,間歇下發通知,檢視伺服器的穩定性2.併發建立長連線,間歇性斷開並重連,保證同時線上的長連線在22w左右,執行12H,檢視伺服器的穩定性

測試步驟

  1. 編寫指令碼實現併發請求併發

    image image
  2. 搭建測試環境①找1臺liunx機器,搭建python執行環境,安裝指令碼支援的包、模組②執行websocket指令碼,保證指令碼正常執行③ 編寫run_test.sh指令碼,執行多個websocket.py,單機大約可同時併發大約5w~6w的tcp連結,視linux 系統核心而定(因為本次需要同時併發22w,共4臺liunx機器,所以單臺併發6w左右)

    image

問題總結

    1. 有些linux系統最大tcp連結數比較小,無法支援同時併發6w量的tcp連結?原因:最大tcp連線數和系統允許開啟的最大檔案數,使用者允許開啟的最大檔案數,TCP網路連線可用的埠範圍有關,取上述的最小值;一般的設定規則為:系統最大檔案數>可用埠>使用者最大檔案數