У нас есть приложение ASP.NET Core 3.0, размещенное за IIS в Windows Server 2016. При большой нагрузке (5000+ одновременных пользователей) мы начинаем получать 503 ошибки с сообщением «Служба недоступна».
Я проверил логи на %SystemRoot%\System32\LogFiles\HTTPERR
и понял, что они в основном из-за LimitExceeded. Вот несколько примеров данных:
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 205 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 207 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 209 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 211 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 213 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 215 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 217 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 219 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 221 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 223 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 225 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 227 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 229 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 231 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 233 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 235 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 237 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 239 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 241 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 243 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 245 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 247 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 249 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 251 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 253 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 255 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 257 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 259 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 261 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 263 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 265 - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - 267 - - LimitExceeded -
2019-11-22 20:36:33 5.113.159.51 47537 185.211.56.203 443 - - - - - - Client_Reset -
2019-11-22 20:36:33 5.125.149.3 54861 185.211.56.203 443 HTTP/2.0 GET /api/messaging/checkcallcompatibility 72959 - 7 Client_Reset patogh.me(domain)(4.0)(pool)
2019-11-22 20:36:33 5.112.111.38 36112 185.211.56.203 443 - - - - - - ClientCancel -
2019-11-22 20:36:33 5.121.34.242 55374 185.211.56.203 443 HTTP/2.0 GET /api/messaging/checkcallcompatibility 94051 - 7 Client_Reset patogh.me(domain)(4.0)(pool)
2019-11-22 20:36:33 83.122.43.131 34801 185.211.56.203 443 - - - - - - LimitExceeded -
2019-11-22 20:36:33 5.119.159.122 51429 185.211.56.203 443 - - - - - - LimitExceeded -
2019-11-22 20:36:33 5.74.28.250 12622 185.211.56.203 443 - - - - - - Client_Reset -
2019-11-22 20:36:33 5.112.111.38 36113 185.211.56.203 443 - - - - - - Client_Reset -
2019-11-22 20:36:33 89.196.176.185 38334 185.211.56.203 443 HTTP/2.0 GET /api/messaging/checkcallcompatibility 4921 - 7 Client_Reset patogh.me(domain)(4.0)(pool)
2019-11-22 20:36:34 5.121.34.242 55374 185.211.56.203 443 HTTP/2.0 GET /api/messaging/checkcallcompatibility 94065 - 7 Client_Reset patogh.me(domain)(4.0)(pool)
2019-11-22 20:36:34 91.251.90.58 43009 185.211.56.203 443 HTTP/2.0 GET /api/messaging/checkcallcompatibility 68999 - 7 Client_Reset patogh.me(domain)(4.0)(pool)
2019-11-22 20:36:34 5.112.111.38 36115 185.211.56.203 443 - - - - - - Client_Reset -
2019-11-22 20:36:34 172.80.200.76 56406 185.211.56.203 443 - - - - - - Client_Reset -
Итак, как мне узнать, какой лимит превышен, и как я могу его изменить?
Потратив неделю и потеряв много денег, я наткнулся на этот урок, который датируется 2012 годом.
https://github.com/SignalR/SignalR/wiki/Performance
Очевидно, существует смехотворный лимит в 5000 одновременных запросов на одно приложение, которое обрабатывает IIS. Итак, я выполнил команду ниже в %windir%\System32\inetsrv\
меняя его на 50 000.
appcmd.exe set config /section:system.webserver/serverRuntime /appConcurrentRequestLimit:50000
Этот предел мог быть достаточно высоким, когда веб-сокеты не использовались, а серверы не были достаточно мощными, чтобы обрабатывать больше запросов. В настоящее время большинство серверов могут довольно легко обрабатывать десятки тысяч одновременных запросов, а многие приложения требуют постоянных подключений к веб-сокетам.