中程度のトラフィックで1 秒あたりのリクエスト数が少ないために問題が発生している Web アプリケーションがあります。リクエストの平均実行時間は、1 ページあたり約 200 ミリ秒です。
環境をシミュレートするために、1 行のコードで Asp.NET 4.0 Web アプリケーションに非常に単純なテスト ページを作成しました。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
System.Threading.Thread.Sleep(200)
End Sub
4コアCPU、8GB RAM、Win7 Enterprise 64ビット、クリーンインストールのサーバーに公開しました。
次に、このテスト ページに負荷をかける非常に単純なコンソール アプリケーションを作成しました。
For i = 1 To 100
For j = 1 To 100
Dim client = New System.Net.WebClient
client.DownloadStringAsync(New Uri(address))
Next
Threading.Thread.Sleep(1000)
Next
パフォーマンス モニターを開いて、Requests/sec を観察しました。どう頑張っても50でした。すべてのハードウェア (CPU、メモリ) の使用率が非常に低かったため、それを増やす余地が十分にあるはずです。
以下のように machine.config の processModel を変更しましたが、うまくいきませんでした。
<processModel autoConfig="false" maxWorkerThreads="1000" maxIoThreads="1000" minWorkerThreads="500" minIoThreads="500" />
では、ハードウェアをフルに活用し、1 秒あたりの処理要求数を増やすにはどうすればよいでしょうか?