Назад | Перейти на главную страницу

IIS, обслуживающий статический контент, дает 503 случайным образом

У нас возникли проблемы с нашим сервером изображений.

Это Win 2008, работающая под управлением IIS 7.5, и обслуживает только статический контент: изображения.

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

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

В любом случае, отключив кэш вывода, мы теперь наблюдаем случайные 5-минутные интервалы, когда все запросы просто получают 503 Service Unavailable. В течение этого периода счетчик производительности «Файлы в кэше» колеблется (не увеличивается и не уменьшается), а по истечении этого периода все кеши очищаются.

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

Дело в том, что мы изменили параметр ObjectTTL в реестре, поэтому мы кэшируем файлы в течение 3 минут (что сработало очень хорошо, наш дисковый ввод-вывод значительно упал)

Таким образом, даже с отключенным кэшированием вывода мы по-прежнему кэшируем множество файлов - если бы мы могли просто избавиться от случайных 503, это было бы идеально :-D

Мы не получаем никаких сообщений в журнале событий Windows в течение этих 503 интервалов, поэтому мы не понимаем, что делать.

Любые идеи приветствуются :-)

Мы наконец решили проблему.

Очевидно, это было вызвано проверкой IIS изменений web.config в подкаталогах.

Установив allowSubDirConfig = "false" в нашем файле applicationhost.config, проблема решена.

Это несколько странно, так как у нас не более 1 файла web.config, и он находится в корне проекта - все же, если он работает, зачем жаловаться :-D

Возможно, проблема в ограничениях RequestQueue / ConcurrentRequest. Рассмотрим настройки принятого ответа на этот вопрос о переполнении стека:

Ошибки 503 IIS 7.0 с универсальным обработчиком (.ashx), реализующим IHttpAsyncHandler

Для устранения ошибки 503 потребовалось 3 разных изменения конфигурации:

machine.config:

<configuration>
...  
   <system.web>  
    ...  
      <processModel enable="true" requestQueueLimit="100000"/>

Диспетчер IIS> Пулы приложений> Расширенные настройки

Queue Length : 65535

и, наконец (недостающий фрагмент головоломки), командная строка:

appcmd.exe set config /section:serverRuntime /appConcurrent