Как увеличить количество запросов в секунду с постоянным временем выполнения для 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, который даст вам несколько вариантов:

ASP.NET стресс-тестирование

После того, как вы убедились, что проблема заключается именно в вашем серверном приложении, сообщите нам об этом, и мы сможем продолжить расследование.

Другие вопросы по тегам