настройки пула приложений убивают потоки, но сохраняют настройки - PullRequest
2 голосов
/ 17 ноября 2009

.net 2.0 aspx app / IIS6 создает глупое число потоков в пуле приложений процесса w3wp.exe.

Приложение было выделено в собственный пул приложений со следующими настройками:

УТИЛИЗАЦИИ

переработка рабочих процессов (в минутах): 870 перезапустить рабочий процесс (нет запросов): (не отмечен) перезапускать рабочие процессы в следующее время: 00:00 максимальная виртуальная память: (не отмечен) Макс. используемая память (в МБ): 1000 МБ (1 ГБ)

ПРОИЗВОДИТЕЛЬНОСТЬ

завершение рабочих процессов после простоя в течение (время в минутах): 20 ограничение очереди запросов кернала (количество запросов): 1000 включить мониторинг процессора (%): 85 обновить номера использования процессора (в минутах): 5 действие, выполняемое, когда использование процессора превышает максимальное использование процессора: NO ACTION (сохраняет сессии) максимальное количество рабочих процессов: 1

ЗДОРОВЬЕ

включить проверку связи (проверено) Рабочий процесс ping каждые (секунд): 30 включить быструю защиту от сбоев (проверено) неудачи: 5 период времени (в минутах): 5 ограничение по времени запуска - рабочий процесс должен запуститься в течение (секунд): 90 ограничение по времени выключения - рабочий процесс должен завершиться в течение (секунд): 90

При нормальном запуске процесс w3wp.exe использует 300 МБ ОЗУ и 50 therads. Когда моя проблема возникает, количество потоков медленно увеличивается до 10000 ram до 1 ГБ, прежде чем потоки вернутся к 0. Процесс w3wp.exe НЕ выключен, и мои пользователи не вышли из системы (принципиально), т.е. они сохраняют их сеанс и не нужно войти в систему. Хотя стандартные 50 потоков убиты среди 10 000 румяных потоков.

1) Может ли эксперт предложить какие-либо плюсы / минусы в указанных выше настройках пула приложений?

2) Настройка «max used mem», похоже, помогает автоматически решить эту проблему (убивая потоки, сохраняя сеанс жив, но может кто-нибудь объяснить почему? ... я понимаю, что темы не имеют отношения к сеанс).

Приложение использует серверные сеансы, но мы храним локальный файл cookie для аутентификации.

1 Ответ

2 голосов
/ 19 ноября 2009

Тема

10 тыс. Потоков - это безумно много, и ваши потоки тратят больше времени на включение и выключение процессора, чем на фактическую работу. ака бьется.

РЕДАКТИРОВАТЬ: я предполагаю, что это веб-приложение .NET.

Использует ли ваше приложение ThreadPool или BackgroundWorkers? Похоже, что вам нужно использовать какой-то механизм, отличный от стандартного антуража потоков IIS (всего около 4 на процессор), чтобы достичь потоков 10 тыс.

Память

Каждый поток требует памяти для отслеживания в дополнение к памяти, которую он использует для работы, поэтому из-за большого объема потоков вы, вероятно, достигнете предела 1G.

Сессия (я выживу!)

Приложение, вероятно, настроено для хранения состояния сеанса в постоянном хранилище или службе состояний сеанса. В этом случае рабочий процесс может быть безопасно переработан без потери информации о состоянии пользователя. Если состояние сеанса было настроено (в файле Web.config) как In-Proc, то состояние сеанса будет потеряно при перезапуске рабочего процесса.

Рабочий процесс переработки

Еще одно замечание: перед тем, как рабочий процесс умирает, другой рабочий процесс настраивается и начинает занимать его место. Где-то в этом процессе вы, вероятно, видите процесс w3wp.exe (старый или новый) с 0 потоками.

BackgroundWorkers как кролики

Если ваши потоки выполняют работу, которая длится дольше 1 секунды (на самом деле 1/2 секунды), не используйте BackgroundWorkers. Если вы не измените максимальные потоки ThreadPool (что НЕ рекомендуется, так как это может испортить более глубокие функциональные возможности в .NET), не существует жесткого (достаточного) ограничения на количество фоновых рабочих мест, которые могут работать одновременно. В этом случае было бы лучше использовать модель очереди потребителя.

Проверить этот сайт . Это отличный ресурс по параллельному программированию с множеством моделей и примеров.

...