我正在測試使用socket.io和Node.js編寫的websockets應用程序的可伸縮性。我想強調測試和基準性能。我可以使用哪些工具?如何基於基於websocket的Node.js應用程序進行基準測試?
到目前爲止,我看着wsbench但我想探索其他選擇。
我正在測試使用socket.io和Node.js編寫的websockets應用程序的可伸縮性。我想強調測試和基準性能。我可以使用哪些工具?如何基於基於websocket的Node.js應用程序進行基準測試?
到目前爲止,我看着wsbench但我想探索其他選擇。
有一個非常簡單的Socket.IO client implementation對Node.js的這不是一個真正的基準測試工具,但它確實知道Socket.IO的協議。
利用這一點,它很容易寫一個客戶端與應用程序交互。
我花了一天的時間研究基準node.js和socket.io,我嘗試了一些解決方案,我發現你不能使用wsbench來測試socket.io,因爲socket.io有它自己的協議,需要致力於建立連接。
在嘗試了幾個其他解決方案但沒有運氣之後,我最終使用了socket.io-benchmark,並且我僅在一個m1.large EC2實例上使用了僅有一個內核的空間,可以節省60,000個連接。在我的情況下,我只想測量socket.io連接的開銷(這要求我在socket.io-benchmark中註釋掉一些代碼),所以我沒有在客戶端和服務器之間發送任何消息。
有趣的是看到了客戶更多的CPU和內存比服務器。因此,請確保您基準測試的客戶端服務器非常健壯,我使用了EC2 c1.xlarge並擁有足夠的空間。我將基準分成6個獨立的進程,因此可以跨多個核心進行擴展並避免內存限制。
要小心,在客戶端上設置的<rampup in seconds>
選擇足夠高的,如果你把它設置爲較低的一切緩衝器和研磨停止。
socket.io-benchmark的唯一問題是我必須使用節點v0.4.12才能使它工作,因爲它依賴於v8-profiler,它不會在較新版本的節點下編譯(截至寫入時) 。
對於剛剛標杆多少併發連接,可以建立我建議wsbench。但是它不適用於Socket.IO站點(因爲更復雜的握手)。我正在研究它,並發現了幾個工具,只是建立連接到Socket.IO服務器。衡量實際表現還不夠。 您需要的是發送和接收真實消息,以模擬您的Web應用程序的真實客戶端。我描述瞭如何創建自己的標杆這裏的一些想法:Benchmarking for Node.JS/Socket.IO sites
https://www.npmjs.org/package/thor
這一個命令行工具,具有相似的輸出作爲Apache的長凳
Thor: version: 1.0.0 God of Thunder, son of Odin and smasher of WebSockets! Thou shall: - Spawn 1 workers. - Create 2 concurrent/parallel connections. - Smash 100 connections with the mighty Mjölnir. The answers you seek shall be yours, once I claim what is mine. Connecting to ws://server:8080/examples/websocket/chat Opened 100 connections Online 439 milliseconds Time taken 441 milliseconds Connected 100 Disconnected 0 Failed 55 Total transferred 132.62kB Total received 71.85kB Durations (ms): min mean stddev median max Handshaking 1 5 3 4 20 Latency 0 0 1 0 3 Percentile (ms): 50% 66% 75% 80% 90% 95% 98% 98% 100% Handshaking 4 5 5 6 7 11 17 20 20 Latency 0 0 1 1 1 1 1 2 3
我最近使用Thor來做一些負載測試,發現Thor實際上並沒有打開併發連接。他們在被打開後不久關閉。 (我使用HAProxy stats屏幕發現了這個。) – 2014-06-17 01:02:39
我一直在嘗試這樣做在過去的幾天裏開始和結束,這種方法存在嚴重的問題。對於少量的併發連接來說很好,但對於數百個連接數來說,它開始崩潰。我可能會做一些愚蠢的事情,但是當他們頻繁接收消息時,連接就會無聲無息地開始失敗。這不會發生在低併發,只有高併發。無論什麼原因,它使得實際的嚴重負載測試幾乎不可能。這是我的應用程序的問題?你有高併發成功嗎? – drewww 2011-11-23 23:04:55
@Drewww只是想知道你如何結束這個,我發現你的一些代碼在https://github.com/drewww/socket.io-benchmarking,並注意到它看起來你在python中實現了客戶端? – 2012-02-03 13:49:51
python實現也不能很好地工作。要使它以嚴格的規模(> 1k併發)工作,唯一的方法就是使用Java。蟒蛇企圖仍然在回購,但它並沒有真正有效地工作。 – drewww 2012-02-03 19:30:42