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