如何基于基于websocket的Node.js应用程序进行基准测试?
我正在测试使用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