使用曲柄实现 SignalR 连接密度测试
警告
本文档不适用于最新版本的 SignalR。 查看 ASP.NET Core SignalR。
本文介绍如何使用 Crank 工具通过多个模拟客户端测试应用程序。
应用程序在其托管环境中运行 (Azure Web 角色、IIS 或使用 Owin) 自承载后,可以使用 Crank 工具测试应用程序对高级别连接密度的响应。 托管环境可以是 Internet Information Services (IIS) 服务器、Owin 主机或 Azure Web 角色。 (注意:性能计数器在Azure 应用服务 Web 应用上不可用,因此无法从连接密度测试获取性能数据。)
连接密度是指可以在服务器上建立的并发 TCP 连接数。 每个 TCP 连接都会产生自身的开销,并且打开大量空闲连接最终会导致内存瓶颈。
SignalR 代码库 包括一个名为 Crank 的负载测试工具。 可在 GitHub 上的 开发分支 中找到最新版本的 Crank。 可以 在此处下载 SignalR 代码库的 Dev 分支的 Zip 存档。
Crank 可用于使服务器的内存完全饱和,以便计算服务器硬件上可能的空闲连接总数。 或者,还可以使用 Crank 在一定数量的内存压力下对服务器进行负载测试,方法是增加连接,直到达到特定计数或特定内存阈值。
测试时,请务必使用远程客户端 () ,以避免资源 ((即 TCP 连接和内存) )的任何竞争。 监视客户端 () ,确保它们不会遇到任何瓶颈,从而阻止服务器 (内存或 CPU) 达到其全部容量。 可能需要增加客户端数才能完全加载服务器。
运行连接密度测试
本部分介绍在 SignalR 应用程序上运行连接密度测试所需的步骤。
- 下载并生成 SignalR 代码库的 Dev 分支。 在命令提示符下,导航到 <project directory>\src\Microsoft.AspNet.SignalR.Crank\bin\debug。
- 将应用程序部署到其预期的托管环境。 记下应用程序使用的终结点;例如,在入门教程中创建的应用程序中,终结点为
http://<yourhost>:8080/signalr
。 - 在服务器上安装 SignalR 性能计数器 。 如果应用程序在 Azure 上运行,请参阅 在 Azure Web 角色中使用 SignalR 性能计数器。
下载并生成代码库并在主机上安装性能计数器后,可以在 文件夹中找到 src\Microsoft.AspNet.SignalR.Crank\bin\Debug
Crank 命令行工具。
Crank 工具的可用选项包括:
- /?:显示帮助屏幕。 如果省略 Url 参数,也会显示可用选项。
- /Url:SignalR 连接的 URL。 此参数是必需的。 对于使用默认映射的 SignalR 应用程序,路径将以“/signalr”结尾。
- /Transport:所用传输的名称。 默认值为
auto
,这将选择最佳可用协议。 选项包括WebSockets
、ServerSentEvents
和LongPolling
(ForeverFrame
不是 Crank 的选项,因为 .NET 客户端而不是 Internet Explorer 用于) 。 有关 SignalR 如何选择传输的详细信息,请参阅 传输和回退。 - /BatchSize:在每个批处理中添加的客户端数。 默认值为 50。
- /ConnectInterval:添加连接的间隔(以毫秒为单位)。 默认值为 500。
- /Connections:用于对应用程序进行负载测试的连接数。 默认值为 100,000。
- /ConnectTimeout:中止测试前的超时(以秒为单位)。 默认值为 300。
- MinServerMBytes:要达到的最小服务器兆字节。 默认值为 500。
- SendBytes:发送到服务器的有效负载的大小(以字节为单位)。 默认值为 0。
- SendInterval:发送到服务器的消息之间的延迟(以毫秒为单位)。 默认值为 500。
- SendTimeout:发送到服务器的消息的超时(以毫秒为单位)。 默认值为 300。
- ControllerUrl:一个客户端将在其中托管控制器中心的 URL。 默认值为 null, (没有控制器中心) 。 控制器中心在 Crank 会话启动时启动;控制器中心和 Crank 之间没有进一步接触。
- NumClients:要连接到应用程序的模拟客户端数。 默认值为 1。
- 日志文件:测试运行的日志文件的文件名。 默认为
crank.csv
。 - SampleInterval:性能计数器样本之间的时间(以毫秒为单位)。 默认值为 1000。
- SignalRInstance:服务器上性能计数器的实例名称。 默认使用客户端连接状态。
示例
以下命令将在 Azure 上测试名为 pfsignalr
的站点,该站点使用 100 个连接在端口 8080 上使用名为“ControllerHub”的中心托管应用程序。
crank /Connections:100 /Url:http://pfsignalr.cloudapp.net:8080/signalr