Как очистить кэш iis

Обновлено: 07.07.2024

Мне нужно очистить кеш IIS на моем сервере. Точная причина подробно описана ниже; но причина не имеет значения. Я на 100% уверен, что это необходимое мне решение; как подробно описано ниже, я использовал процесс устранения, чтобы определить, что это действительно проблема, с которой я столкнулся, и необходимое мне решение.

У меня есть приложение MVC3, которое является тематическим (скин-архитектура). Подумайте об этом как о Wordpress; пользователи могут разрабатывать тему, загружать ее и активировать на своем сайте. Тема контролирует именно окончательный вывод HTML. Это чрезмерное упрощение, поскольку я предоставляю API с полезными функциями, которые будут потребляться по темам.

В любом случае пользователи могут изменить тему сайта. Тема в настоящее время хранится в статической переменной. Когда страница просмотра отображается, имя темы определяет расположение файла макета (который содержит ссылки на файлы CSS и т.д.) И файлы представления. Тема - это параметр, который сохраняется в БД.

Например, если у меня есть тема под названием "Foo", то при запросе страницы /Admin я могу использовать /Themes/Foo/Admin.cshtml . Если у меня есть другая тема под названием "Бар", которая не имеет этого файла, тогда для /Admin он может запросить /Themes/Bar/Generic.cshtml как макет.

Проблема заключается в том, что изменение темы означает, что каждая страница на сайте устарела. Это означает, что на любых сайтах, кешированных на IIS7, будет отображаться старая тема; это неверно. Мне нужно, чтобы они показывали новую тему.

В любом случае IIS7 использует кеширование по умолчанию. Мне нужен способ очистить кеш, когда пользователь меняет тему. В настоящее время этого не происходит, и пользователи продолжают видеть старую тему до тех пор, пока кеш (как-то) не истечет.

Чтобы объяснить, в тесте интеграции я в основном:

    Перейти к localhost/Test/
    Войдите (введите значения в формы)
    Измените тему, перейдя по правой странице и нажав правую ссылку
    Запросить другую страницу
    Посмотрите, изменилась ли тема (на основе имени файла layout/css).

В настоящее время этот тест проходит примерно в 50% случаев. Проблема в том, что IIS кэширует результаты, и я не могу наглядно считать reset кэш на стороне сервера.

Опять же, я не говорю об очистке сеанса или кеша пользовательской стороны; IIS сам виновен в кэшировании моего приложения. Я также не хочу полностью отключать кеш через настройки IIS, а) потому что я не могу заставить людей, которые устанавливают мое приложение, сделать это, и б), потому что кеширование является хорошим.

Веб-сервер IIS, как среда выполнения веб-приложения, имеет некоторое влияние на общую производительность. Например, чем короче конвейер обработки запросов в IIS, тем меньше кода будет выполняться и тем выше будет скорость работы. В IIS имеются механизмы, которые можно использовать для увеличения производительности приложения за счет снижения задержек и увеличения пропускной способности, а также некоторые механизмы, которые при правильной настройке могут увеличить общую производительность приложения.

Кэширование вывода

В IIS имеется два механизма кеширования: кеш в пространстве пользователя и кеш в пространстве ядра.

Кеширование в пространстве пользователя

Чтобы настроить кеширование, откройте приложение IIS Manager, выберите свое веб-приложение, откройте настройку Output Caching (Кеширование вывода), щелкните на ссылке Add (Добавить) в панели Actions (Действия), чтобы добавить новое правило кеширования, или выберите существующее правило для редактирования.

Чтобы создать новое правило кеширования в пространстве пользователя, добавьте новое правило, введите расширение имен файлов, которые требуется кешировать, и отметьте флажок User-mode caching (Кеширование в режиме пользователя) в диалоге Add Cache Rule (Добавить правило кеширования), как показано на рисунке ниже:

Диалог Add Cache Rule (Добавить правило кеширования)

Кеширование в пространстве ядра

Настройка правил кеширования в пространстве ядра выполняется почти так же, как кеширование в пространстве пользователя. В диалоге настройки правила установите флажок Kernel-mode caching (Кеширование в режиме ядра) и выберите желаемый способ кеширования.

В одном правиле допускается использовать оба режима кеширования, в пространстве ядра и в пространстве пользователя. В этом случае IIS будет сначала пытаться применить кеширование в пространстве ядра. Если попытка не увенчается успехом, например, когда запрос содержит строку с параметрами, применяется кеширование в пространстве пользователя.

Если выбран вариант кеширования на определенный интервал времени в обоих режима, в пространстве ядра и в пространстве пользователя, оба интервала должны совпадать, в противном случае в обоих режимах будет использоваться интервал, установленный для кеширования в режиме ядра.

Настройка пула приложения

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

Перезапуск

Изменяя параметр настройки перезапуска можно управлять моментом, когда пул приложения будет перезапускать рабочий процесс. Например, можно организовать перезапуск рабочего процесса через каждые несколько часов или когда будет превышен некоторый предел занимаемой памяти. Если с течением времени веб-приложение начинает потреблять большие объемы памяти (например, для хранения объектов), увеличение количества перезапусков может помочь удерживать его производительность на высоком уровне. С другой стороны, если веб-приложение не проявляет никаких проблем в процессе работы, уменьшение количества перезапусков предотвратит потерю информации о состоянии.

Тайм-аут простоя

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

Привязка процессов к ядрам процессора

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

Веб-сад

Другим примером, когда может пригодиться наличие нескольких процессов, выполняющих одно и то же веб-приложение - использование 64-разрядного сервера IIS, выполняющего 32-разрядное веб-приложение. 64-разрядные серверы обычно имеют большой объем памяти, а 32-разрядное приложение может использовать не более 2 Гбайт, что часто приводит к увеличению частоты сборки мусора и, вероятно, к перезапускам пула приложения. Поддерживая два или три рабочих процесса для 32-разрядного веб-приложения, можно добиться более полного использования памяти сервера, уменьшить частоту сборки мусора и перезапусков пула приложения.

В настройках IIS пула приложения можно определить максимальное количество рабочих процессов, которое можно запустить для обслуживания запросов. Если установить этот параметр в значение больше 1 (значение по умолчанию), с ростом нагрузки на веб-приложение для него будут запускаться дополнительные рабочие процессы, вплоть до указанного максимума. Пул приложения, имеющий более одного процесса, называется «веб-садом» («Web Garden»). Каждый раз, когда устанавливается соединение с клиентом, оно связывается с рабочим процессом, который будет обслуживать запросы от этого клиента, при этом соблюдается равномерное распределение запросов от пользователей между процессами и уменьшаются накладные расходы на конкуренцию.

Имейте в виду, что использование веб-сада имеет и недостатки. Большее количество рабочих процессов занимает больший объем памяти, исключается возможность использовать механизм по умолчанию хранения информации о сеансе в памяти процесса, при выполнении нескольких рабочих на одном компьютере, между ними может возникать конкуренция за локальные ресурсы, например, за использование общего файла журнала.

Читайте также: