Тестирование плотности подключений SignalR с помощью Crank

Tom FitzMacken

Предупреждение

Эта документация не подходит для последней версии SignalR. Взгляните на ASP.NET Core SignalR.

В этой статье описывается, как использовать средство Crank для тестирования приложения с несколькими имитируемыми клиентами.

После запуска приложения в своей среде размещения (веб-роли Azure, IIS или локального размещения с помощью Owin) можно протестировать ответ приложения на высокий уровень плотности подключения с помощью средства Crank. Среда размещения может быть сервером Internet Information Services (IIS), хостом Owin или веб-ролью Azure. (Примечание. Счетчики производительности недоступны в веб-приложениях службы приложений Azure, поэтому вы не сможете получить данные о производительности из теста плотности подключения.)

Плотность подключений относится к количеству одновременных TCP-подключений, которые можно установить на сервере. Каждое TCP-подключение несет свои собственные издержки, и открытие большого количества бездействуемых подключений в конечном итоге приведет к созданию узкого места памяти.

База кода SignalR включает средство нагрузочного тестирования с именем Crank. Последнюю версию Crank можно найти в ветви Dev на GitHub. Zip-архив ветви разработки базы кода SignalR можно скачать здесь.

Crank может использоваться для полного насыщения памяти сервера, чтобы вычислить общее количество бездействуемых подключений, возможное на серверном оборудовании. Кроме того, вы можете использовать Crank для нагрузочного тестирования сервера под определенной нагрузкой на память, увеличивая количество подключений до достижения определенного количества или до достижения определенного порога нагрузки на память.

При тестировании важно использовать удаленные клиенты, чтобы избежать конкуренции за ресурсы (т. е. TCP-подключения и память). Следите за клиентами, чтобы убедиться, что они не достигают узких мест, которые могут препятствовать серверу достичь полной емкости (памяти или ЦП). Возможно, потребуется увеличить количество клиентов, чтобы полностью загрузить сервер.

Выполнение теста плотности подключения

В этом разделе описаны шаги, необходимые для выполнения теста плотности подключения в приложении SignalR.

  1. Скачайте и создайте ветвь разработки базы кода SignalR. В командной строке перейдите в <каталог> проекта\src\Microsoft.AspNet.SignalR.Crank\bin\debug.
  2. Разверните приложение в своей предполагаемой среде размещения. Запишите конечную точку, которую использует ваше приложение. Например, в приложении, созданном в руководстве по началу работы, конечная точка — http://<yourhost>:8080/signalr.
  3. Установите счетчики производительности SignalR на сервере. Если приложение работает в Azure, ознакомьтесь со сведениями об использовании счетчиков производительности SignalR в веб-роли Azure.

После скачивания и создания базы кода и установки счетчиков производительности на узле средство командной строки Crank можно найти в папке src\Microsoft.AspNet.SignalR.Crank\bin\Debug .

Доступные варианты для инструмента Crank включают:

  • /?: отображается экран справки. Доступные параметры также отображаются, если параметр URL-адреса опущен.
  • /URL: URL-адрес для подключений SignalR. Этот параметр является обязательным. Для приложения 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: количество имитированных клиентов для подключения к приложению. Значение по умолчанию — одно.
  • Logfile: имя файла для файла журнала для тестового запуска. Значение по умолчанию — crank.csv.
  • SampleInterval: время в миллисекундах между образцами счетчиков производительности. Значение по умолчанию — 1000.
  • SignalRInstance: имя экземпляра счетчиков производительности на сервере. По умолчанию используется состояние подключения клиента.

Пример

Следующая команда протестирует сайт под названием pfsignalr в Azure, который размещает приложение на порту 8080 с концентратором под названием "ControllerHub", используя 100 подключений.

crank /Connections:100 /Url:http://pfsignalr.cloudapp.net:8080/signalr