WCFの昔は、MaxConcurrentCalls
設定を使用してサービスの同時実行を制御していました。 MaxConcurrentCalls
のデフォルトは16の同時呼び出しですが、必要に応じてその値を増減できます。
.NET Core Web APIでサーバー側の同時実行性をどのように制御しますか?同時リクエストが多すぎるとサーバー全体のパフォーマンスが低下する可能性があるため、このケースではおそらく制限する必要があります。
ASP.NET Coreアプリケーションの同時実行性は、その Webサーバー によって処理されます。例えば:
var Host = new WebHostBuilder()
.UseKestrel(options => options.ThreadCount = 8)
Kestrel非同期ベースの実装のため、Kestrelスレッド数を1K
のような大きな値に設定することはお勧めしません。
詳細: KestrelはNode.jsのようなリクエストの処理に単一のスレッドを使用していますか?
ASP.NET Core 2.0 Preview 2の新しいLimits
プロパティが 導入 になりました。
次の制限を追加できます。
- 最大クライアント接続
- 最大リクエスト本文サイズ
- 最大リクエスト本文データレート
例えば:
.UseKestrel(options =>
{
options.Limits.MaxConcurrentConnections = 100;
}
Kestrelがリバースプロキシの背後で実行されている場合、プロキシ自体を調整できます。たとえば、IISアプリケーションプールをweb.config
またはaspnet.config
に構成できます。
<configuration>
<system.web>
<applicationPool
maxConcurrentRequestsPerCPU="5000"
maxConcurrentThreadsPerCPU="0"
requestQueueLimit="5000" />
</system.web>
</configuration>
もちろんNginxとApacheには独自の同時実行設定があります。