如何加载测试服务器发送的事件?

时间:2013-08-06 19:43:03

标签: benchmarking load-testing server-sent-events

我有一个发送Server Sent Events的小应用程序。我想加载测试我的应用程序,以便我可以对从推送消息到收到消息的时间的延迟进行基准测试,这样我就可以知道性能何时/何地发生故障。有哪些工具可以做到这一点?

2 个答案:

答案 0 :(得分:3)

由于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

答案 1 :(得分:1)

我采用了一个创建shell脚本的简单路径,该脚本启动了连接到我的服务的SSE端点的cURL的N个后台作业。 要获得准确的cURL语法,请打开Chrome网络开发工具 - >网络标签 - >右键单击请求到SSE端点的条目,然后从上下文菜单“Copy as 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并禁止任何输出。

在我的情况下,服务是在NodeJs中实现的,所以我使用process.hrtime()进行高精度计时,以测量通过N个连接的客户端循环以延迟数据的延迟。

结果还可以:它在~0.02秒内提供了1000多个活动连接

请记住,如果您从同一台计算机上运行server + cURL客户端,则可能会达到open files的操作系统限制。要查看linux框上的open file限制(常见情况为1024),请运行:

$ ulimit -n

为了避免达到我获得的1000多个活跃的cURL,你可以:

  • 从多台计算机启动它们
  • 或增加此限制(请参阅sysctl)

我遇到的问题是最终节点因ELIFECYCLE错误而崩溃,并且日志在诊断问题时没有太大帮助。欢迎任何建议。