我有一个小应用程序,可以发送服务器发送的事件。我想加载测试我的应用程序,这样我就可以对从推送消息到接收消息的延迟进行基准测试,这样我就能知道性能何时何地出现故障。有什么工具可以做到这一点?
由于Server-Sent Events
只是HTTP,所以可以使用siege
实用程序。以下是示例:
siege -b -t 1m -c45 http://127.0.0.1:9292/streaming
其中:
-b
基准模式,即不在连接之间等待-t 1m
基准测试1分钟-c45
并发连接数http://127.0.0.1:9292
我的开发服务器主机和自定义端口/streaming
响应Content-Type: text/event-stream
的HTTP端点
输出:
Lifting the server siege... done.
Transactions: 79 hits
Availability: 100.00 %
Elapsed time: 59.87 secs
Data transferred: 0.01 MB
Response time: 23.43 secs
Transaction rate: 1.32 trans/sec
Throughput: 0.00 MB/sec
Concurrency: 30.91
Successful transactions: 79
Failed transactions: 0
Longest transaction: 30.12
Shortest transaction: 10.04
我采用了一个简单的路径来创建一个shell脚本,该脚本启动连接到我的服务的SSE端点的cURL的N个后台作业。要获得确切的cURL语法,请打开Chrome web开发工具->网络选项卡->右键单击SSE端点的请求条目,然后从上下文菜单中选择"复制为cURL"
然后将该命令粘贴到一个shell脚本中,大致如下所示:
#!/bin/bash
i=0;
while [ $i -lt 50 ] ;do
[PASTE YOUR cURL COMMAND HERE] -s -o /dev/null &
i=`expr $i + 1`;
done
这将在每次运行时添加50个后台cURL作业。注意,我在Chrome的cURL命令中添加了参数-s -o /dev/null
。这是为了在静默模式下运行cURL并抑制任何输出。
在我的案例中,该服务是在NodeJ中实现的,因此我使用process.hrtime()
进行高精度计时,以测量通过N个连接的客户端循环广播数据的延迟。
结果还可以:它在约0.02秒的内提供了1000多个活动连接
请记住,如果您在同一台机器上运行server+cURL客户端,您可能会达到open files
的操作系统限制。要查看linux盒子上的open file
限制(常见情况是1024),请运行:
$ ulimit -n
为了避免达到我得到的1000多个活动cURL,你可以:
- 从多台机器启动它们
- 或增加此限制(请参阅sysctl)
我面临的问题是,最终节点因ELIFECYCLE错误而崩溃,日志对诊断问题没有太大帮助。欢迎提出任何建议。