如何基于websocket的Node.js应用程序进行基准测试?

Sri*_*ala 14 benchmarking websocket node.js socket.io

我正在测试我使用socket.io和Node.js编写的websockets应用程序的可伸缩性.我想强调测试并对性能进行基准测试.我可以使用哪些工具?

到目前为止,我已经研究过wsbench,但我想探索任何替代方案.

Sea*_*ter 10

花了一天时间研究基准测试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,它不能在较新版本的节点下编译(截至编写).


小智 5

https://www.npmjs.org/package/thor

\n\n

它是一个命令行实用程序,具有与 Apache Bench 类似的输出

\n\n
\n\n雷神:版本:1.0.0\n\n雷神,奥丁之子,WebSockets 粉碎者!\n\n你应该:\n- 生成 1 个工作人员。\n- 创建 2 个并发/并行连接。\n - 与强大的 Mj\xc3\x83\xc2\xb6lnir 粉碎 100 个连接。\n\n一旦我声明属于我的东西,你寻求的答案就将是你的。\n\n连接到 ws://server:8080/examples/ websocket/chat\n\n 打开 100 个连接\n\n\n在线 439 毫秒\n花费时间 441 毫秒\n连接 100\n断开连接 0\n失败 55\n传输总量 132.62kB\n接收总量 71.85kB\n\n持续时间 (毫秒): \n\n 最小值 平均值 stddev 中值 最大值\n握手 1 5 3 4 20\n延迟 0 0 1 0 3\n\n百分位数 (毫秒):\n\n 50% 66% 75% 80% 90% 95% 98% 98 % 100%\n握手 4 5 5 6 7 11 17 20 20\n延迟 0 0 1 1 1 1 1 2 3\n
\n

  • 我最近使用 Thor 进行了一些负载测试,发现 Thor 实际上并没有打开并发连接。它们在打开后不久就关闭了。(我使用 HAProxy 统计屏幕发现了这一点。) (6认同)

Sté*_*hen 4

Node.js有一个非常简单的Socket.IO 客户端实现。它不是一个真正的基准测试工具,但它确实了解 Socket.IO 的协议。

使用它,编写与您的应用程序交互的客户端相当容易。

  • 在过去的几天里,我一直在断断续续地尝试这样做,但这种方法存在严重的问题。对于少量的并发连接来说这很好,但是当连接数超过几百时,它就开始崩溃了。我可能做了一些愚蠢的事情,但是当连接过于频繁地接收消息时,连接就会开始无声地失败。这种情况在低并发时不会发生,只会在高并发时发生。不管是什么原因,它使得实际的严格负载测试几乎不可能。这是我的应用程序的问题吗?你在高并发方面取得过成功吗? (2认同)