Що робити, щоб IIS не переробив мою програму?


82

У мене є додаток для обслуговування WCF, розміщене в IIS. Під час запуску він запускає дійсно дорогий (за часом та процесором) ресурс для використання в якості локального кешу.

На жаль, IIS, здається, переробляє процес досить регулярно. Тому я намагаюся змінити налаштування в пулі програм, щоб переконатися, що IIS не переробляє додаток. Поки що я змінив наступне:

  • Обмежте інтервал у процесорі від 5 до 0.
  • Час очікування в режимі процесу від 20 до 0.
  • Регулярний інтервал часу під час переробки з 1740 по 0.

Цього буде достатньо? У мене є конкретні запитання щодо предметів, які я змінив:

  1. Що конкретно означає значення Limit Interval під процесором? Чи означає це, що якщо певне використання процесора буде перевищено, пул додатків буде перероблений?
  2. Що саме означає "перероблений"? Чи повністю вирвано програму та запуститься знову?
  3. Яка різниця між "Вимкненням робочого процесу" та "Переробкою пулу додатків"? Документація для простою в режимі очікування в "Model Model" говорить про вимкнення робочого процесу. У той час як документи для регулярного інтервалу часу під час переробки говорять про переробку пулу додатків. Я не дуже бачу різниці між ними. Я думав, що w3wp.exe - це робочий процес, який запускає пул додатків. Чи може хтось пояснити різницю додатку між ними?

Причина наявності тегів IIS7 та IIS7.5 полягає в тому, що додаток буде працювати в обох і сподіваємось, що відповіді між версіями однакові.

Зображення для довідки: введіть тут опис зображення


Де ви взяли цей знімок екрана вище з налаштуваннями для IIS?
Ендрю Вільям Росс

Це лист властивостей Advanced Ad Pool.
TristanK

Відповіді:


105

Переробка

Утилізація зазвичай *, коли IIS запускає новий процес у якості контейнера для вашої програми, а потім дає старий до ShutdownTimeLimit, щоб вийти з власної волі перед тим, як його вбити.

* - зазвичай: див. налаштування DisallowOverlappingRotation / "Вимкнення перекритої переробки"

Це руйнівно , оскільки вихідний процес і вся його інформація про стан відкидаються. Використання стану сеансу, що перебуває поза процесом (наприклад, Державний сервер або база даних, або навіть файли cookie, якщо ваш стан крихітний), може дозволити вам обійти це.

Але це за замовчуванням перекривається - тобто тривалість відключення мінімізована, оскільки новий процес починається і підключений до черги запитів, перш ніж старий відповість "у вас є [ShutdownTimeLimit] секунд, щоб піти. Будь ласка, дотримуйтесь".

Налаштування

На ваше запитання: усі налаштування на цій сторінці певним чином керують переробкою. "Вимкнення" може бути охарактеризовано як "проактивна переробка" - там, де сам процес вирішує, що пора йти, і завершується впорядковано.

Реактивна переробка - це WAS виявляє проблему та знімає процес (після встановлення відповідної W3WP заміни).

Тепер ось декілька речей, які можуть спричинити переробку тієї чи іншої форми:

  • ISAPI вирішив, що це нездорово
  • будь-який збій модуля
  • час очікування
  • обмеження процесора
  • коригування властивостей пулу додатків
    • як ваша мама, можливо , кричала в один момент: "Перестаньте вибирати це, інакше ніколи не стане краще!"
  • "ping" пошкодження * насправді не pinging як таке, тому що він використовує названу трубу - більше "виявлення життя"
  • всі налаштування на скріншоті вище

Що робити:

Як правило:

  • Вимкнути очікування в режимі очікування . 20 хвилин бездіяльності = бум! Новий процес при наступному вхідному запиті. Встановіть це на нуль.

  • Відключити регулярний інтервал часу - за замовчуванням 29 годин різні сторони описували як "шалений", "дратівливий" та "розумний". Насправді лише два з них справжні.

  • За бажанням увімкніть DisallowRotationOnConfigChange (вище, Вимкнути повторне використання для зміни конфігурації ), якщо ви просто не можете перестати грати з ним - це дозволяє вам змінити будь-які налаштування пулу додатків без того, щоб миттєво сигналізувати робочим процесам, що його потрібно вбити. Потрібно вручну переробити пул додатків, щоб отримати ефекти, щоб налаштування набули чинності, що дозволяє попередньо встановити налаштування, а потім скористатися вікном зміни, щоб застосувати їх через процес переробки.

  • Як загальний принцип, залиште pinging увімкнутим . Це ваша мережа безпеки. Я бачив, як люди вимикають її, а потім сайт зависає нескінченно, що призводить до паніки ... тож якщо налаштування занадто агресивні для вашого програми, очевидно, дуже-дуже повільного, що реагує, відмовте їх трохи і подивіться, що ви отримаєте, а не вимикаючи. (Якщо тільки у вас не встановлено автоматичний демпінговий режим для вивішених W3WP за допомогою власного процесу моніторингу)

Цього достатньо, щоб сприйнятий процес вечно жив. Якщо він помре, обов'язково його замінять. Якщо вона висить, пінг повинен вибрати , що і нова повинні початися в протягом 2 -х хвилин (за замовчуванням, в гіршому випадку вапняно повинен бути: до частоти пинга + пінг тайму - ауту + запуск ліміту часу , перш ніж запити знову почати працювати).

Обмеження процесора зазвичай не цікаве, тому що за замовчуванням він вимкнено, а також налаштований нічого не робити; якби він був налаштований на вбивство процесу, впевнений, це був би тригер переробки. Залиште це. Примітка для IIS 8.x, Процесор Throttling також стає опцією.

(IIS) AppPool не є (.Net) AppDomain (але може містити один / деякий)

Але ... тоді ми потрапляємо у .Net землю та утилізацію AppDomain, що також може спричинити втрату держави. (Дивіться: https://blogs.msdn.microsoft.com/tess/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles/ )

Коротка версія, ви робите це, торкнувшись файлу web.config у папці вмісту (знову ж таки з вибором!), Або створивши папку в цій папці, або файл ASPX, або .. інші речі ... і ось про що настільки руйнівно, як рециркуляція пулу додатків, за вирахуванням витрат на запуск нативного коду (це суто керована концепція коду (.Net), тому тут трапляються лише керовані кодові речі).

Антивірус може також викликати це, оскільки він сканує файли web.config, викликаючи сповіщення про зміни, спричиняючи ....


2
Зачекайте, почекайте, почекайте ... чому б ЧИТАННЯ web.config з антивірусу викликати сповіщення про зміну? Будь-який антивірус, який "торкається" web.config без жодних причин, є сміттям.
Шив

AV може не просто читати, але може писати - наприклад, до альтернативного потоку даних, записуючи версію двигуна, що використовується останнім часом для сканування файлу. Як думка.
TristanK

7

Будь ласка, перевірте,

Чому ми переробляємо наші пули програм?

якщо ви переглядаєте Інтернет, щоб знайти причину, через яку пули програм налаштовані автоматично періодично переробляти, вам буде важко знайти розумну відповідь, яка не стосується питань пам'яті. Це схоже на те, що спільнота загалом прийняла той факт, що наші веб-додатки (або сервісні шари, розміщені в IIS) потребують переробки, щоб уникнути проблем із пам'яттю.

Я завжди був думкою, що якщо ваш код вимагає періодичного перезавантаження, щоб продовжувати працювати правильно, то явно щось не так. Десь є помилка у вашому коді, і вам потрібно це виправити, замість того, щоб періодично перезапускати процес, щоб зникнути проблемою.

Дійсно, потрібно почати більше зосереджуватися на управлінні пам'яттю в .NET та на забезпеченні того, щоб наші програми могли працювати без проблем.


3
Однією з причин було те, що .NET використовує окрему купу для «великих об’єктів» (зазвичай це 85K або більше чи щось), які не ущільнюються, коли відбувається збирання сміття (хоча в .NET 4.5.1 я думаю, що вони додали варіант для ущільнення LOH), і в ASP.NET при наданні HTML на стороні сервера не рідкість бачити 85K HTML (особливо для повторного контенту, наприклад таблиць та сіток), і цей HTML в основному є лише величезним об'єктом String на сервері, і якщо він кваліфікується як великий об’єкт, він сприяє фрагментації купи великих об'єктів, в кінцевому підсумку призводить до OutOfMemoryException, отже, переробка
нічого не потрібне

0

На основі сценарію OP (довга ініціалізація при запуску / розминці), ще одна річ, яку слід перевірити, - це обмеження часу запуску (секунди), яке має значення за замовчуванням 90 секунд. Якщо ініціалізація займає більше граничного часу запуску, процес роботи може бути припинений.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.