我有一个发送服务器发送事件的小应用程序。我想要对我的应用程序进行负载测试,以便可以基准测试从推送消息到接收消息所需的延迟时间,以便我可以知道性能在何时/何处发生故障。有哪些工具可用于执行此操作?
我有一个发送服务器发送事件的小应用程序。我想要对我的应用程序进行负载测试,以便可以基准测试从推送消息到接收消息所需的延迟时间,以便我可以知道性能在何时/何处发生故障。有哪些工具可用于执行此操作?
由于 Server-Sent Events
只是 HTTP,因此您可以使用 siege
工具。以下是示例:
siege -b -t 1m -c45 http://127.0.0.1:9292/streaming
参数解释:
-b
压测模式,即连接之间不等待-t 1m
进行 1 分钟的压测-c45
并发连接数量为 45http://127.0.0.1:9292
开发服务器的主机和自定义端口/streaming
HTTP 端点响应内容类型为 Content-Type: text/event-stream
输出结果:
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脚本来启动N个后台作业,这些作业通过cURL连接到我的服务的SSE端点。
要获取精确的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
-s -o /dev/null
。这是为了以静默模式运行cURL并抑制任何输出。process.hrtime()
进行高精度计时,以测量循环遍历N个连接客户端以广播数据的延迟。打开文件
限制。要查看Linux框(常见情况为1024)的打开文件
限制,请运行:$ ulimit -n
Lifting the server siege... Transactions: 0 hits Availability: 0.00 % Elapsed time: 29.61 secs Data transferred: 0.00 MB Response time: 0.00 secs Transaction rate: 0.00 trans/sec Throughput: 0.00 MB/sec Concurrency: 0.00 Successful transactions: 0 Failed transactions: 0 Longest transaction: 0.00 Shortest transaction: 0.00
- Sai--verbose
选项传递给siege
可以提供一些信息。 - sashaegorov