我正在测试使用 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 下编译(截至撰写本文时)。
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
Node.js 有一个非常简单的 Socket.IO 客户端实现。它不是一个真正的基准测试工具,但它确实了解 Socket.IO 的协议。
使用它,编写与您的应用程序交互的客户端相当容易。
对于可以设置多少并发连接的基准测试,我建议使用wsbench。然而,它不适用于 Socket.IO 站点(因为握手更复杂)。我正在研究它,发现了一些只与 Socket.IO 服务器建立连接的工具。这不足以衡量实际性能。 您需要的是发送和接收模拟 Web 应用程序真实客户端的真实消息。我在这里描述了一些关于如何创建自己的基准测试的想法:Node.JS / Socket.IO 站点的基准测试
你可以试试火炮,火炮支持WebSocket。