Поделиться через


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

; автор — Том ФитцМакен (Tom FitzMacken)

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

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

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

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

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

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

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

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

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

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

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

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

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

  • /?: экран справки. Доступные параметры также отображаются, если параметр URL-адреса опущен.
  • /URL: URL-адрес для подключений SignalR. Это обязательный параметр. Для приложения SignalR, использующее сопоставление по умолчанию, путь будет заканчиваться на "/signalr".
  • /Transport: имя используемого транспорта. Значение по умолчанию — auto, что позволяет выбрать наилучший доступный протокол. Параметры включают WebSockets, ServerSentEventsи LongPolling (ForeverFrame не являются вариантом для Crank, так как используется клиент .NET, а не интернет-Обозреватель). Дополнительные сведения о том, как 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