Какие настройки необходимо применить в IIS 10 для достижения высокой производительности?

Здравствуйте. <br/> У меня есть веб-приложение на .NET Core, которое размещается на IIS 10. <br/> Из-за специфики работы время от времени за 10 минут может одновременно заходить до 5000 пользователей. <br/> В результате IIS не справляется с нагрузкой. Мы уже увеличили длину очереди до 20000, установили максимальное количество рабочих процессов на уровне 70, изменили параметр appConcurrentRequestLimit на 20000, а также увеличили максимальное число потоков процессора ASP с 25 до 50 и выставили в конфигурации пула приложений Max Pool Size=700. <br/> Эти изменения позволили улучшить ситуацию. <br/> Можете подсказать, какие еще параметры IIS стоит подкорректировать для повышения его устойчивости к высокой нагрузке? <br/> Виртуальная машина имеет 32 ГБ ОЗУ, 8 процессоров с тактовой частотой 2.40 GHz, Windows Server 2022.
  • 8 апреля 2025 г. 9:35
Ответы на вопрос 2
Для улучшения производительности IIS 10 при высокой нагрузке можно рассмотреть несколько дополнительных настроек и рекомендаций. Вот некоторые из них:

1. **Использование Kestrel в качестве обратного прокси**: Если ваше приложение .NET Core может использовать Kestrel, рекомендуется использовать его перед IIS, а не только полагаться на IIS. Это позволит обрабатывать запросы более эффективно.

2. **Настройка пула приложений**:
   - Убедитесь, что **Idle Time-out** (время ожидания бездействия) пула приложений выставлено в значение более 20 минут (по умолчанию 20 минут). Можно выставить на «0», чтобы отключить ожидание.
   - Убедитесь, что **Rapid-Fail Protection** отключено, чтобы избежать остановки пула приложений при внезапных сбоях.

3. **Параметры процессоров**:
   - Проверьте настройки **CPU throttling** (ограничение CPU) и убедитесь, что они не настроены на ограничение доступной производительности.
   - Убедитесь, что параметр **Thread Count** (число потоков) не установлен слишком высоко. Установка его слишком высокого значения может привести к перегрузке.

4. **Сжатие**:
   - Включите сжатие на уровне IIS (Dynamic Content Compression и Static Content Compression) для ускорения ответа сервера, так как это уменьшит объем передаваемых данных.

5. **Кэширование**:
   - Настройте кэширование на уровне IIS (Output Caching), чтобы повторные запросы к статическим ресурсам обрабатывались быстрее.
   - Используйте кэширование на стороне приложения (MemoryCache, DistributedCache в .NET Core) для оптимизации работы с данными.

6. **Connection Limits**:
   - Убедитесь, что **Connection Limits** выставлены на более высокий предел, чтобы избежать блокировки новых запросов при высокой нагрузке.

7. **Настройка пульса и адаптации**:
   - Используйте **Application Initialization** для предварительной загрузки приложения и его кода при запуске пула приложений, чтобы избежать задержек при первом запросе.
   - Убедитесь, что настройки **Network Queues** правила выставлены правильно для вашей нагрузки.

8. **Мониторинг и Алгоритмы балансировки нагрузки**:
   - Рассмотрите использование таких решений, как **Load Balancer**, для распределения нагрузки на несколько серверов. Это особенно важно при увеличении числа параллельных пользователей.
   - Используйте системы мониторинга, такие как Application Insights, чтобы отслеживать производительность и находить узкие места.

9. **Обновления и оптимизация кода**:
   - Убедитесь, что вы используете актуальные версии .NET Core и IIS, так как в новых версиях могут быть улучшения производительности и безопасности.
   - Оптимизируйте код вашего приложения, чтобы минимизировать время обработки запросов (асинхронность, уменьшение количества запросов к базе данных и т.д.).

10. **Ограничение размера Request Body**:
   - Убедитесь, что максимальный размер тела запросов не слишком велик. Установка ограничений на размер тела запроса может помочь избежать атак на приложение.

Каждая из этих рекомендаций может оказать положительное влияние на производительность вашего веб-приложения. Однако лучшие результаты можно получить, комбинируя эти подходы и тщательно настраивая сервер в зависимости от специфики вашей нагрузки.
Если вам нужна производительность, то следует выкинуть IIS в топку и использовать стандартный nginx на debian/centos. А если у вас в приложении нет жесткой привязки к винде, то и винду можете выкинуть в топку и использовать линукс в качестве сервера для вашего приложения.
Похожие вопросы