我正在测试我使用 socket.io 和 Node.js 编写的 websockets 应用程序的可扩展性。我想对性能进行压力测试和基准测试。我可以使用哪些工具?
到目前为止,我已经研究了wsbench,但我想探索任何替代方案。
我正在测试我使用 socket.io 和 Node.js 编写的 websockets 应用程序的可扩展性。我想对性能进行压力测试和基准测试。我可以使用哪些工具?
到目前为止,我已经研究了wsbench,但我想探索任何替代方案。
花了一天时间研究基准 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 下编译(截至撰写时)。
Node.js有一个非常简单的Socket.IO 客户端实现。它不是一个真正的基准测试工具,但它确实了解 Socket.IO 的协议。
使用它,编写与您的应用程序交互的客户端相当容易。
https://www.npmjs.org/package/thor
它是一个命令行实用程序,具有与 Apache Bench 类似的输出
雷神:版本:1.0.0 雷神,奥丁之子,WebSockets 的破坏者! 你应该: - 产生 1 名工人。 - 创建 2 个并发/并行连接。 - 用强大的 Mjölnir 粉碎 100 个连接。 一旦我声称属于我的东西,你寻求的答案将是你的。 连接到 ws://server:8080/examples/websocket/chat 打开 100 个连接 在线 439 毫秒 耗时 441 毫秒 已连接 100 断开连接 0 失败 55 总传输量 132.62kB 总共收到 71.85kB 持续时间(毫秒): min mean stddev 中位数 max 握手 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
对于可以设置多少并发连接的基准测试,我推荐wsbench。但是它不适用于 Socket.IO 站点(因为更复杂的握手)。我正在研究它,发现了一些工具,它们只是建立了与 Socket.IO 服务器的连接。仅仅衡量实际性能是不够的。您需要的是发送和接收模拟 Web 应用程序真实客户端的真实消息。我在这里描述了一些关于如何创建自己的基准测试的想法:Node.JS / Socket.IO 网站的基准测试