3

我有一个发送服务器发送事件的小应用程序。我想对我的应用程序进行负载测试,这样我就可以对从推送消息到收到消息的延迟进行基准测试,这样我就可以知道性能何时/何地出现故障。有哪些工具可以做到这一点?

4

2 回答 2

7

由于Server-Sent Events它只是 HTTP,因此您可以使用siege实用程序。这是示例:

siege -b -t 1m -c45 http://127.0.0.1:9292/streaming

在哪里:

  • -b基准模式,即不要在连接之间等待
  • -t 1m1分钟基准
  • -c45并发连接数
  • http://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
于 2016-04-22T09:58:44.347 回答
2

我采用了创建 shell 脚本的简单路径,该脚本启动了连接到我的服务的 SSE 端点的 n 个 cURL 后台作业。要获得准确的 cURL 语法,请打开 Chrome 网络开发工具 -> 网络选项卡 -> 右键单击​​对 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 命令中添加了 params -s -o /dev/null。这是在静默模式下运行 cURL 并抑制任何输出。

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

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

请记住,如果您在同一台机器上运行服务器 + cURL 客户端,您可能会遇到open files. 要查看open filelinux 机器的限制(常见情况是 1024),请运行:

$ ulimit -n

为了避免达到我得到的 1000 多个活动 cURL,您可以:

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

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

于 2014-03-26T10:34:08.177 回答