Crank による SignalR 接続密度テストSignalR Connection Density Testing with Crank

によってTom FitzMackenby Tom FitzMacken

Note

この記事では、ASP.NET SignalR を指します。This article refers to ASP.NET SignalR. SignalR を使用して、Java、Node.js、またはサーバーレス シナリオでは、リアルタイムのシナリオを有効にする方法と思う場合を見てASP.NET Core SignalRします。If you're thinking about using SignalR to enable real-time scenarios with Java, Node.js, or in a serverless scenario, take a look at ASP.NET Core SignalR. 既に ASP.NET SignalR を使用した場合を見て、のバージョンの違いバージョンの違いと ASP.NET Core SignalR での機能強化を理解するページ。If you've already used ASP.NET SignalR, take a look at the version differences page to understand the differences in the versions and the improvements in ASP.NET Core SignalR. 最後に、Microsoft Azure でリアルタイム アプリを実行することがわかっている場合を見て、 Azure SignalR サービスなど、アプリを必要とすると、クラウド ベースのスケール アウトを提供します。Finally, if you know you'll be running your real-time apps in Microsoft Azure, take a look at the Azure SignalR Service, as it provides cloud-based scale-out once your apps need it.

この記事では、Crank ツールを使用して、複数のシミュレートされたクライアント アプリケーションをテストする方法について説明します。This article describes how to use the Crank tool to test an application with multiple simulated clients.

(いずれか、Azure web ロール、IIS、またはセルフホステッド Owin を使用して) そのホスティング環境でアプリケーションを実行すると、Crank ツールを使用して接続密度の高いレベルへのアプリケーションの応答をテストできます。Once your application is running in its hosting environment (either an Azure web role, IIS, or self-hosted using Owin), you can test application's response to a high level of connection density using the Crank tool. ホスティング環境、インターネット インフォメーション サービス (IIS) サーバー、Owin ホスト、または Azure web ロールを使用できます。The hosting environment can be an Internet Information Services (IIS) server, an Owin host, or an Azure web role. (メモ: パフォーマンス カウンターはない Azure App Service の Web Apps で使用できるので、接続密度テストからパフォーマンス データを取得することはできません。)(Note: Performance counters are not available on Azure App Service Web Apps, so you will not be able to get performance data from a connection density test.)

接続の密度は、サーバー上に確立できる同時 TCP 接続の数を示します。Connection Density refers to the number of simultaneous TCP connections that can be established on a server. TCP 接続ごとに独自のオーバーヘッドが発生し、アイドル接続の数が多いを開くと、メモリのボトルネックは最終的に作成します。Each TCP connection incurs its own overhead, and opening a large number of idle connections will eventually create a memory bottleneck.

SignalR のコードベースという名前のロード テスト ツールが含まれていますCrankします。The SignalR codebase includes a load-testing tool called Crank. Crank の最新バージョンが記載されてDev 分岐GitHub でします。The latest version of Crank can be found in the Dev branch on GitHub. SignalR の開発ブランチのアーカイブのコードベースを Zip をダウンロードするここします。You can download a Zip archive of the Dev branch of the SignalR codebase here.

Crank を完全にサーバーのメモリが飽和状態にサーバー ハードウェアに可能なアイドル状態の接続の合計数を計算するためにことができます。Crank may be used to fully saturate the server's memory in order to calculate the total number of idle connections possible on the server hardware. または、使用すること可能性がありますも Crank ロード テストを一定の量、メモリ負荷の下で、サーバーで特定の数または特定のメモリしきい値に達するまで接続知識を深めます。Alternatively, you may also use Crank to load test the server under a certain amount of memory pressure, by ramping up connections until a specific count or a specific memory threshold is reached.

をテストする場合は、リモート クライアントを使用して、リソース (つまり、TCP 接続とメモリ) の競合を回避する必要があります。When testing, it is important to use remote client(s) to avoid any competition for resources (i.e., TCP connections and memory). 完全な容量 (メモリまたは CPU) に到達できないサーバーを妨げる可能性のあるボトルネック、達していないことを確認するクライアントを監視します。Monitor the client(s) to ensure that they are not hitting any bottlenecks that may prevent the server from reaching its full capacity (memory or CPU). サーバーを完全に読み込むためにクライアントの数を増やす必要があります。You may need to increase the number of clients in order to fully load the server.

接続密度テストを実行します。Running a Connection Density Test

このセクションでは、SignalR アプリケーションで接続密度テストを実行するために必要な手順について説明します。This section describes the steps needed to run a connection density test on a SignalR application.

  1. ビルドをダウンロードして、 SignalR の開発ブランチのコードベースします。Download and build the Dev branch of the SignalR codebase. コマンド プロンプトでに移動します。<プロジェクト ディレクトリ>\src\Microsoft.AspNet.SignalR.Crank\bin\debug します。In a command prompt, navigate to <project directory>\src\Microsoft.AspNet.SignalR.Crank\bin\debug.
  2. その目的のホスティング環境にアプリケーションをデプロイします。Deploy your application to its intended hosting environment. アプリケーションが使用するエンドポイントをメモしてをおきます作成したアプリケーションなどで、チュートリアル入門、エンドポイントがhttp://<yourhost>:8080/signalrします。Make a note of the endpoint that your application uses; for example, in the application created in the Getting Started tutorial, the endpoint is http://<yourhost>:8080/signalr.
  3. インストールSignalR パフォーマンス カウンターサーバー。Install SignalR performance counters on the server. アプリケーションが Azure で実行している場合は、次を参照してください。 Azure Web ロールで SignalR パフォーマンス カウンターを使用してします。If your application is running on Azure, see Using SignalR Performance Counters in an Azure Web Role.

Crank コマンド ライン ツールで見つかるダウンロードして、コードベースのビルドしホストのパフォーマンス カウンターをインストールした後、src\Microsoft.AspNet.SignalR.Crank\bin\Debugフォルダー。Once you've downloaded and built the codebase, and installed performance counters on your host, the Crank command-line tool can be found in the src\Microsoft.AspNet.SignalR.Crank\bin\Debug folder.

Crank ツールの使用可能なオプションは次のとおりです。Available options for the Crank tool include:

  • /?:ヘルプ画面を示しています。/?: Shows the help screen. 場合にも使用可能なオプションが表示されます、 Urlパラメーターを省略するとします。The available options are also displayed if the Url parameter is omitted.
  • /Url:SignalR 接続の URL。/Url: The URL for SignalR connections. このパラメーターは必須です。This parameter is required. SignalR アプリケーションの既定のマッピングを使用する場合、パスの末尾が"/signalr"。For a SignalR application using the default mapping, the path will end in "/signalr".
  • /トランスポート:使用されるトランスポートの名前。/Transport: The name of the transport used. 既定値はauto、最適使用可能なプロトコルが選択されます。The default is auto, which will select the best available protocol. オプションがあります。 WebSocketsServerSentEvents、およびLongPolling(ForeverFrameオプションではありません、実際の .NET クライアントから Internet Explorer を使用するのではなく)。Options include WebSockets, ServerSentEvents, and LongPolling (ForeverFrame is not an option for Crank, since the .NET client rather than Internet Explorer is used). SignalR のトランスポートを選択する方法の詳細については、次を参照してください。トランスポートとフォールバックします。For more information on how SignalR selects transports, see Transports and Fallbacks.
  • /BatchSize:各バッチで追加されたクライアントの数。/BatchSize: The number of clients added in each batch. 既定値には 50 です。The default is 50.
  • /ConnectInterval:間隔が接続の追加 (ミリ秒)。/ConnectInterval: The interval in milliseconds between adding connections. 既定値は 500 です。The default is 500.
  • /接続:アプリケーションのロード テストに使用される接続の数。/Connections: The number of connections used to load-test the application. 既定値には 100,000 です。The default is 100,000.
  • /ConnectTimeout:テストを中止するまでの秒のタイムアウト。/ConnectTimeout: The timeout in seconds before aborting the test. 既定では 300 です。The default is 300.
  • MinServerMBytes:到達するサーバーの最小のメガバイト数。MinServerMBytes: The minimum server megabytes to reach. 既定値は 500 です。The default is 500.
  • SendBytes:バイト単位でサーバーに送信されるペイロードのサイズ。SendBytes: The size of the payload sent to the server in bytes. 既定値は 0 です。The default is 0.
  • SendInterval:サーバーへのメッセージの間のミリ秒の遅延。SendInterval: The delay in milliseconds between messages to the server. 既定値は 500 です。The default is 500.
  • SendTimeout:サーバーへのメッセージのミリ秒単位のタイムアウト。SendTimeout: The timeout in milliseconds for messages to the server. 既定では 300 です。The default is 300.
  • ControllerUrl:1 つのクライアントがコント ローラーのハブをホストする Url です。ControllerUrl: The Url where one client will host a controller hub. 既定値は null (コント ローラー ハブはありません)。The default is null (no controller hub). Crank セッションが開始される; コント ローラー、ハブが開始しましたそれ以上のコント ローラーのハブと Crank 間の接続が行われます。The controller hub is started when the Crank session starts; no further contact between the controller hub and Crank is made.
  • NumClients:アプリケーションに接続するシミュレートされたクライアントの数。NumClients: The number of simulated clients to connect to the application. 既定では、1 つです。The default is one.
  • ログ ファイル:テストの実行のログ ファイルのファイル名。Logfile: The filename for the logfile for the test run. 既定値は crank.csv です。The default is crank.csv.
  • SampleInterval:パフォーマンス カウンターのサンプル間のミリ秒単位の時間。SampleInterval: The time in milliseconds between performance counter samples. 既定値は 1000 です。The default is 1000.
  • SignalRInstance:サーバーのパフォーマンス カウンターのインスタンス名。SignalRInstance: The instance name for the performance counters on the server. 既定では、クライアント接続の状態を使用します。The default is to use the client connection state.

Example

次のコマンドはというサイトをテストpfsignalr"ControllerHub"という名前のハブでポート 8080 でアプリケーションをホストする azure では、100 個の接続を使用します。The following command will test a site called pfsignalr on Azure that hosts an application on port 8080 with a hub named "ControllerHub", using 100 connections.

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