SignalR パフォーマンスチューニング

投稿者: | 12月 8, 2015

SignalRのwikiに掲載されてる「Performance Tuning SignalR」をざっくり意訳した投稿です。

多くの同時接続数と多くの秒間リクエスト数を処理するには、いくつかのサーバー設定を変更する必要があります。

IISの設定

アプリケーションごとの最大同時接続数

同時に処理できるIISの同時リクエスト数を増やします。

  • 管理者権限でコマンドプロぷトを開き、「%windir%\System32\inetsrv\」に移動します。
  • 次のコマンドを実行し、appConcurrentRequestLimit属性を変更し、適切な値を設定します。(IIS 7以降ではデフォルト5000になっています)
appcmd.exe set config /section:system.webserver/serverRuntime /appConcurrentRequestLimit:100000

ASP.NETの設定

CPU毎の最大同時リクエスト数

デフォルトでは、ASP.NET 4.0では、CPU毎の最大同時リクエスト数が5000に設定されています。もし同時接続数を増やす必要がある場合は、maxConcurrentRequestsPerCPUの設定値を増やす必要があります。

  • %windir%\Microsoft.NET\Framework\v4.0.30319\aspnet.config を開きます。(64bitプロセッサー用のFramework 64用)
  • 次のサンプルをコピーします。
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <runtime>
        <legacyUnhandledExceptionPolicy enabled="false" />
        <legacyImpersonationPolicy enabled="true"/>
        <alwaysFlowImpersonationPolicy enabled="false"/>
        <SymbolReadingPolicy enabled="1" />
        <shadowCopyVerifyByTimestamp enabled="true"/>
    </runtime>
    <startup useLegacyV2RuntimeActivationPolicy="true" />
    <system.web>
        <applicationPool maxConcurrentRequestsPerCPU="20000" />
    </system.web>
</configuration>

リクエストキューの制限

接続数の合計が、maxConcurrentRequestsPerCPU 設定(maxConcurrentRequestsPerCPU * ロジカルプロセッサー数)を超えた場合、ASP.NETはキューを使用してリクエストを制限します。キューサイズの管理をするために、requestQueueLimitを微調整します。

  • %windir%\Microsoft.NET\Framework\v4.0.30319\aspnet.config を開きます。(64bitプロセッサー用のFramework 64用)
  • processModel エレメントを探します
  • autoConfig 属性をFalseに設定し、requestQueueLimitを適切な数に設定します

<processModel autoConfig=”false” requestQueueLimit=”250000″ />

パフォーマンスカウンター

つぎのパフォーマンスカウンターは、同時接続のテスト、設定を適切にするのに役立ちます。

メモリ

  • (w3wp用の)すべてのヒープで.NET CLR Memory # bytes

ASP.NET

  • ASP.NET\Requests Current
  • ASP.NET\Queued
  • ASP.NET\Rejected

CPU

  • Processor Information\Processor Time

TCP/IP

  • TCPv6\Connections Established
  • TCPv4\Connections Established

Web Service

  • Web Service\Current Connections
  • Web Service\Maximum Connections

Threading

  • .NET CLR LocksAndThreads\ # of current logical Threads
  • .NET CLR LocksAndThreads\ # of current physical ThreadsThreading

crankを使用して、クライアントのロード生成

SignalRは、コミュニケーションに特定のプロトコルを使用します。サーバーのテストのためにロードを生成するには、ツールを使用するのが適切です。
詳細は、プロジェクトをチェックアウトしてください。

参考

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください