Как увеличить количество запросов в секунду с постоянным временем выполнения для Asp.NET?
У меня есть веб-приложение, которое страдает из-за низких запросов / сек при умеренном трафике. Среднее время выполнения запроса составляет около 200 мс на страницу.
Чтобы смоделировать среду, я создал супер простую тестовую страницу в веб-приложении Asp.NET 4.0 с одной строкой кода.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
System.Threading.Thread.Sleep(200)
End Sub
Я опубликовал его на сервере с 4-х ядерным процессором, 8 ГБ оперативной памяти, 64-битной Win7 Enterprise, чистой установкой.
Затем я создал супер простое консольное приложение, которое немного нагрузит эту тестовую страницу.
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
Я открыл монитор производительности и наблюдал количество запросов / сек. Это всегда было 50 независимо от того, что я пытался сделать, чтобы увеличить его. Все аппаратное использование (процессор, память) было очень низким, поэтому должно быть достаточно места для его увеличения.
Я изменил processModel в machine.config, как показано ниже, но не повезло.
<processModel autoConfig="false" maxWorkerThreads="1000" maxIoThreads="1000" minWorkerThreads="500" minIoThreads="500" />
Итак, что мне нужно сделать, чтобы использовать мое полное оборудование и увеличить количество обработанных запросов в секунду?
1 ответ
Если бы вы работали только с одним потоком на стороне сервера, вы бы получили 1000/200 = 5 запросов в секунду. Но вы получаете 50. Таким образом, кажется, что сервер позволяет вам иметь несколько потоков, но их недостаточно.
Или, возможно, ваше клиентское приложение не запускает достаточно потоков, чтобы максимально использовать сервер. Частично проблема заключается в том, что вы тестируете два приложения одновременно.
Одним из решений этой проблемы является использование проверенного инструмента веб-производительности. Вот вопрос о SO, который даст вам несколько вариантов:
После того, как вы убедились, что проблема заключается именно в вашем серверном приложении, сообщите нам об этом, и мы сможем продолжить расследование.