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

问题描述 投票:0回答:5

我正在测试使用 socket.io 和 Node.js 编写的 websockets 应用程序的可扩展性。我想对性能进行压力测试和基准测试。我可以使用哪些工具?

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

node.js benchmarking websocket socket.io
5个回答
12
投票

花了一天时间研究基准测试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 的唯一问题是我必须使用 Node v0.4.12 才能使其全部正常工作,因为它依赖于 v8-profiler,它无法在较新版本的 Node 下编译(截至撰写本文时)。


5
投票

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

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


雷神:版本:1.0.0

雷神,奥丁之子,WebSockets 的粉碎者!

你应:
- 产生 1 名工人。
- 创建 2 个并发/并行连接。
- 用强大的雷神锤粉碎 100 个联系。

一旦我声称属于我的东西,你所寻求的答案就将是你的。

连接到 ws://server:8080/examples/websocket/chat

  已打开 100 个连接


在线439毫秒
耗时 441 毫秒
已连接 100
已断开连接 0
失败 55
总传输量 132.62kB
总共收到 71.85kB

持续时间(毫秒):

                     最小值 平均值 标准偏差 中值 最大值
握手 1 5 3 4 20
延迟 0 0 1 0 3

百分位(毫秒):

                      50% 66% 75% 80% 90% 95% 98% 98% 100%
握手 4 5 5 6 7 11 17 20 20
延迟 0 0 1 1 1 1 1 2 3

4
投票

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

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


0
投票

对于可以设置多少并发连接的基准测试,我建议使用wsbench。然而,它不适用于 Socket.IO 站点(因为握手更复杂)。我正在研究它,发现了一些只与 Socket.IO 服务器建立连接的工具。这不足以衡量实际性能。 您需要的是发送和接收模拟 Web 应用程序真实客户端的真实消息。我在这里描述了一些关于如何创建自己的基准测试的想法:Node.JS / Socket.IO 站点的基准测试


0
投票

你可以试试火炮,火炮支持WebSocket。

https://www.artillery.io/docs/reference/engines/websocket

© www.soinside.com 2019 - 2024. All rights reserved.