也是好久沒寫博客了,近期確實很忙,嗯..幾個項目..頭要炸..今天忙里偷閑.繼續我們的小系列..
先謝謝大家的支持..
我們來聊聊SignalR的性能監測與服務器的負載測試
我們開發任何一個應用,他的性能監測是很重要的參考數據,關系着我們后期優化,更新,改動..等等...
SignalR作為一個及時通訊的框架,穩定性,及時性,延遲這些,更是需要全方位的監測
(就不多廢話了,大家都懂)
負載測試... 裝個大點的B.. 人家淘寶爸爸雙十一這么大的訪問壓力,就是靠着多輪負載測試才有的今天..(咳咳,B裝的有點大,大神無視)
開發工具:VS2013 數據庫:無 SignalR版本:2.2 系統:Win7
嗯,讀本文之前,你需要去GitHub上下載SignalR源碼 : 點我下載
話不多說,我們先來說性能監測
我們下載了SignalR源碼,打開它,找到Microsoft.AspNet.SignalR.Utils這個項目,編譯..
我們會在Debug中看到signalr.exe這個文件
當然..直接運行是不行的.CMD,找到 (你的存放路徑)\SignalR-dev\SignalR-dev\src\Microsoft.AspNet.SignalR.Utils\bin\Debug
運行命令行:SignalR.exe ipc
會看到下圖:
這就是安裝OK了..
然后,接着,我們右鍵,我的電腦>管理>性能監視器
如圖:
打開性能監視器,右鍵添加,或者直接點擊綠色的加號,
找到SignalR,在下面的框中找到自己需要監控的實例(使用了SignalR的實例都在里面),選擇添加,點擊確定
如圖:
這樣,我們就可以及時的監控到SignalR的運行情況,連接數量等等數據(數據太多,我就不一一列出了)...
如下圖:
性能監控到此就結束了,接下來,我們要講講負載測試
關於負載測試.
SignalR給我們提供了不少工具,比如Microsoft.AspNet.SignalR.Crank.(這個大家先記住,后面我們會用到)
這個也是一個小工具,並不是什么類庫,當然,是開源的,有興趣的大神可以去研究研究基於這個寫一個適合自己項目的負載測試工具..
同樣,需要下載SignalR源碼,不過,這次我們編譯的是Microsoft.AspNet.SignalR.Crank.這個類庫.
編譯完成之后,我們繼續打開SignalR源碼找到Microsoft.AspNet.SignalR.LoadTestHarness這個項目,
看名字就很明顯了..這是官方爸爸給我們寫好的一個負載測試工具,當然,源碼也可以隨意看,自行修改或者擴展.
源碼我就不貼出來了,大家可以自己去看主要內容都在Dashboard.cs這個類里面
我們把這個項目設置為啟動項,直接運行,得到如下頁面:
PS:界面當然是英文的,我隨意找了個翻譯工具 翻譯了一下,大概意思也都差不多..
我們可以選擇連接行為,設置發送頻率 (信息/每秒,..不是味精.. 哈哈哈哈 - -)
當然,也可以設置每條信息的數據量大小
點擊負載生成器,會看到如下界面:
嗯,其實就是打開了一個新的連接,相當於多了一個用戶進行連接,設置好定時發送時間,點擊Go...就開始發送了..
雖然這個小工具..已經很比較完善了,但是,我們的服務器..是要進行負載壓力測試的..一個個的點擊頁面,這要點到什么時候?(麒麟臂可以無視)..
所以這就需要我們前面提到過的工具:Microsoft.AspNet.SignalR.Crank
首先,我們還是編譯它,然后CMD進入它的路徑(當然,在服務器上用,不需要源碼,編譯好復制上去就行):
輸入命令: crank /?
會看到如下圖的信息:
大致翻譯一下:
-
/ ?:顯示屏幕上的幫助。 如果顯示的可用選項也Url參數被省略。
-
/ Url:SignalR的URL連接。 這個參數是必需的。 SignalR應用程序使用默認映射,路徑將在“/ SignalR”結束。
-
/Transport:選擇連接方式。 默認值是
auto,會自動選擇最優的,
WebSockets
,serversentevents
,longpolling
(注意:foreverframe不行
) -
/ BatchSize:添加到每一批客戶的數量。 默認是50。
-
/ ConnectInterval:添加連接之間的間隔以毫秒為單位。 默認值是500。
-
/Connections:用於負載測試的應用程序的連接數量。 默認值是100000。
-
/ ConnectTimeout:超時關閉的毫秒數。 默認值是300。
-
MinServerMBytes:最小服務器兆字節。 默認值是500。
-
SendBytes:有效負載發送到服務器的大小字節。 缺省值是0。
-
SendInterval:消息到服務器之間的延遲毫秒。 默認值是500。
-
SendTimeout:發送到服務器超時的毫秒數。 默認值是300。
-
ControllerUrl:
-
NumClients:
-
Logfile:測試運行的日志文件的文件名。 默認值是
crank.csv
。 -
SampleInterval:性能計數器樣本之間的時間,以毫秒為單位。 默認值是1000。
-
SignalRInstance:為服務器上的性能計數器實例名稱。 默認是使用客戶端連接狀態。
這里,我們為了測試,輸入:crank /Connections:100 /Url:http://localhost:29573/TestConnection /BatchSize:10
也就是每10批加入連接,加入100個.
連接添加完畢了,我們進入剛才的頁面,進行廣播
如下圖:
這里我們設置的每秒10條信息.1024b大小,用戶量170,可以明顯在監控中看到,我的渣渣電腦CPU已經彪到74%了..
本文到此就結束了..
SignalR目前是完全開源的,文章中所涉及到的項目,大家下載SignalR源碼就能看到,也希望有大神能被我這塊磚引出來根據源碼擴展個更好的負載工具或者監控工具.