使用曲軸的 SignalR 連線密度測試

作者:Tom FitzMacken

警告

本檔不適用於最新版的 SignalR。 請查看ASP.NET Core SignalR

本文說明如何使用 Crank 工具來測試具有多個模擬用戶端的應用程式。

一旦應用程式在其裝載環境中執行, (使用 Owin) 的 Azure Web 角色、IIS 或自我裝載,您就可以使用 Crank 工具測試應用程式對高階連線密度的回應。 裝載環境可以是 Internet Information Services (IIS) 伺服器、Owin 主機或 Azure Web 角色。 (注意:效能計數器無法在Azure App 服務 Web Apps上使用,因此您無法從連線密度測試取得效能資料。)

連線密度是指可以在伺服器上建立的同時 TCP 連線數目。 每個 TCP 連線都會產生自己的額外負荷,而開啟大量的閒置連線最終會造成記憶體瓶頸。

SignalR 程式碼基底 包含名為 Crank的負載測試工具。 您可以在 GitHub 上的 Dev 分支 中找到最新版的 Crank。 您可以 在這裡下載 SignalR 程式碼基底開發人員分支的 Zip 封存。

Crank 可用來完全飽和伺服器的記憶體,以計算伺服器硬體上可能的閒置連線總數。 或者,您也可以使用 Crank,將連線向上增加,直到達到特定計數或特定記憶體閾值為止,以在特定記憶體壓力量下負載測試伺服器。

測試時,請務必使用遠端用戶端 () ,以避免資源 (的任何競爭,例如 TCP 連線和記憶體) 。 監視用戶端 () ,以確保它們不會達到任何可能阻止伺服器達到其完整容量的瓶頸, (記憶體或 CPU) 。 您可能需要增加用戶端數目,才能完整載入伺服器。

執行連線密度測試

本節說明在 SignalR 應用程式上執行連線密度測試所需的步驟。

  1. 下載並建置 SignalR 程式碼基底的 Dev 分支。 在命令提示字元中,流覽至 < 專案目錄 > \src\Microsoft.AspNet.SignalR.Crank\bin\debug。
  2. 將應用程式部署至其預定的裝載環境。 記下您的應用程式使用的端點;例如,在消費者入門教學課程中建立的應用程式中,端點是 http://<yourhost>:8080/signalr
  3. 在伺服器上安裝 SignalR 效能計數器 。 如果您的應用程式正在 Azure 上執行,請參閱 在 Azure Web 角色中使用 SignalR 效能計數器

下載並建置程式碼基底,並在主機上安裝效能計數器之後,即可在 src\Microsoft.AspNet.SignalR.Crank\bin\Debug 資料夾中找到 Crank 命令列工具。

Crank 工具的可用選項包括:

  • /?:顯示說明畫面。 如果省略 Url 參數,也會顯示可用的選項。
  • /Url:SignalR 連線的 URL。 此為必要參數。 針對使用預設對應的 SignalR 應用程式,路徑會以 「/signalr」 結尾。
  • /Transport:所使用的傳輸名稱。 預設值為 auto ,這會選取最佳的可用通訊協定。 選項包括 WebSocketsServerSentEventsLongPolling (ForeverFrame 不是 Crank 的選項,因為會使用 .NET 用戶端而非 Internet Explorer) 。 如需 SignalR 如何選取傳輸的詳細資訊,請參閱 傳輸和後援
  • /BatchSize:每個批次中新增的用戶端數目。 預設值為 50。
  • /ConnectInterval:新增連線之間的間隔以毫秒為單位。 預設值為 500。
  • /Connections:用來載入測試應用程式的連線數目。 預設值為 100,000。
  • /ConnectTimeout:中止測試之前,以秒為單位的逾時。 預設值為 300。
  • MinServerMBytes:要達到的最低伺服器 MB。 預設值為 500。
  • SendBytes:以位元組為單位傳送至伺服器的承載大小。 預設值是 0。
  • SendInterval:訊息到伺服器之間的延遲以毫秒為單位。 預設值為 500。
  • SendTimeout:訊息傳送至伺服器的逾時以毫秒為單位。 預設值為 300。
  • ControllerUrl:一個用戶端將裝載控制器中樞的 URL。 預設值為 null, (沒有控制器中樞) 。 控制器中樞會在 Crank 會話啟動時啟動;控制器中樞與 Crank 之間沒有進一步的連絡。
  • NumClients:要連線到應用程式的模擬用戶端數目。 預設值為 1。
  • Logfile:測試回合之 logfile 的檔案名。 預設值為 crank.csv
  • SampleInterval:效能計數器範例之間的時間以毫秒為單位。 預設值是 1000。
  • SignalRInstance:伺服器上的效能計數器實例名稱。 預設值為使用用戶端線上狀態。

範例

下列命令會在 Azure 上測試名為 pfsignalr 的網站,其會使用 100 個連線,在埠 8080 上裝載名為 「ControllerHub」 的應用程式。

crank /Connections:100 /Url:http://pfsignalr.cloudapp.net:8080/signalr