Crank를 사용하여 SignalR 연결 밀도 테스트

Tom FitzMacken

경고

이 설명서는 최신 버전의 SignalR용이 아닙니다. ASP.NET Core SignalR을 살펴보세요.

이 문서에서는 Crank 도구를 사용하여 여러 시뮬레이션된 클라이언트에서 애플리케이션을 테스트하는 방법을 설명합니다.

애플리케이션이 호스팅 환경(Azure 웹 역할, IIS 또는 Owin을 사용하여 자체 호스팅)에서 실행되면 Crank 도구를 사용하여 높은 수준의 연결 밀도에 대한 애플리케이션의 응답을 테스트할 수 있습니다. 호스팅 환경은 IIS(인터넷 정보 서비스) 서버, Owin 호스트 또는 Azure 웹 역할일 수 있습니다. (참고: Azure App Service Web Apps 성능 카운터를 사용할 수 없으므로 연결 밀도 테스트에서 성능 데이터를 가져올 수 없습니다.)

연결 밀도는 서버에서 설정할 수 있는 동시 TCP 연결 수를 나타냅니다. 각 TCP 연결은 자체 오버헤드를 발생시키고 많은 수의 유휴 연결을 열면 결국 메모리 병목 현상이 발생합니다.

SignalR 코드베이스 에는 Crank라는 부하 테스트 도구가 포함되어 있습니다. 최신 버전의 Crank는 GitHub 의 개발 분기 에서 찾을 수 있습니다. 여기에서 SignalR 코드베이스의 개발 분기의 Zip 보관 파일을 다운로드할 수 있습니다.

크랭크는 서버 하드웨어에서 가능한 유휴 연결의 총 수를 계산하기 위해 서버의 메모리를 완전히 포화하는 데 사용할 수 있습니다. 또는 Crank를 사용하여 특정 개수 또는 특정 메모리 임계값에 도달할 때까지 연결을 늘려 특정 양의 메모리 압력으로 서버를 로드할 수도 있습니다.

테스트할 때 리소스(예: TCP 연결 및 메모리)에 대한 경쟁을 피하기 위해 원격 클라이언트를 사용하는 것이 중요합니다. 클라이언트를 모니터링하여 서버가 전체 용량(메모리 또는 CPU)에 도달하지 못하게 하는 병목 현상이 발생하지 않도록 합니다. 서버를 완전히 로드하려면 클라이언트 수를 늘려야 할 수 있습니다.

연결 밀도 테스트 실행

이 섹션에서는 SignalR 애플리케이션에서 연결 밀도 테스트를 실행하는 데 필요한 단계를 설명합니다.

  1. SignalR 코드베이스의 개발 분기를 다운로드하고 빌드합니다. 명령 프롬프트에서 프로젝트 디렉터리>\src\Microsoft.AspNet.SignalR.Crank\bin\debug로 이동합니다<.
  2. 애플리케이션을 의도한 호스팅 환경에 배포합니다. 애플리케이션에서 사용하는 엔드포인트를 기록해 둡다. 예를 들어 시작 자습서에서 만든 애플리케이션에서 엔드포인트는 입니다http://<yourhost>:8080/signalr.
  3. 서버에 SignalR 성능 카운터를 설치합니다 . 애플리케이션이 Azure에서 실행되는 경우 Azure 웹 역할에서 SignalR 성능 카운터 사용을 참조하세요.

코드베이스를 다운로드 및 빌드하고 호스트에 성능 카운터를 설치한 후에는 폴더에 src\Microsoft.AspNet.SignalR.Crank\bin\Debug Crank 명령줄 도구를 찾을 수 있습니다.

Crank 도구에 사용할 수 있는 옵션은 다음과 같습니다.

  • /?: 도움말 화면을 표시합니다. Url 매개 변수를 생략하면 사용 가능한 옵션도 표시됩니다.
  • /Url: SignalR 연결의 URL입니다. 이 매개 변수는 필수입니다. 기본 매핑을 사용하는 SignalR 애플리케이션의 경우 경로는 "/signalr"로 끝납니다.
  • /Transport: 사용된 전송의 이름입니다. 기본값은 입니다 auto. 이 프로토콜은 사용 가능한 가장 적합한 프로토콜을 선택합니다. 옵션에는 , ServerSentEventsLongPolling 가 포함WebSockets됩니다.ForeverFrame 인터넷 Explorer 대신 .NET 클라이언트가 사용되므로 Crank에 대한 옵션이 아닙니다. 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개입니다.
  • Logfile: 테스트 실행에 대한 logfile의 파일 이름입니다. 기본값은 crank.csv입니다.
  • SampleInterval: 성능 카운터 샘플 간의 시간(밀리초)입니다. 기본값은 1000입니다.
  • SignalRInstance: 서버의 성능 카운터에 대한 instance 이름입니다. 기본값은 클라이언트 연결 상태를 사용하는 것입니다.

예제

다음 명령은 100개의 연결을 사용하여 "ControllerHub"라는 허브를 사용하여 포트 8080에서 애플리케이션을 호스트하는 Azure에서 라는 pfsignalr 사이트를 테스트합니다.

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