Пиф или иис что лучше: куда вложить средства — Финансовая азбука — Финам.Ру

Содержание

что такое индивидуальный инвестиционный счет и зачем он нужен

Главная особенность индивидуального инвестиционного счета — гарантированный доход в виде налогового вычета, что делает ИИС отличным инструментом и для начинающих инвесторов, и для опытных трейдеров.

С помощью налогового вычета можно получать до 52 000 ₽ в год — если вы платите НДФЛ и пополняете ИИС каждый год на 400 000 ₽ и больше. Другой вариант — возможность освободить ваш доход по сделкам с инвестициями от налога в 13%, что выгоднее, когда выбранная вами инвестстратегия приносит больше 52 000 ₽ в год. Как работает налоговый вычет по ИИС

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

Помимо этого, ИИС в Тинькофф Инвестициях обладает и другими преимуществами. Вот лишь некоторые из них.

Все инвестиции у вас в телефоне. С Тинькофф вам не придется устанавливать сложные программы для работы на бирже и долго разбираться в том, как они устроены. У мобильного приложения Тинькофф Инвестиций понятный интерфейс со всеми необходимыми функциями. Оно будет удобно и тем, кто делает только первые шаги на фондовом рынке, и инвесторам с опытом. Скачать приложение Тинькофф Инвестиций

Чтобы купить ценные бумаги в приложении Тинькофф Инвестиций, просто выберите понравившийся актив в списке, укажите нужное количество и нажмите «Купить»

Быстрое открытие счета. На заполнение заявки онлайн уйдет всего несколько минут. Наш представитель сам приедет с необходимыми документами — куда и когда вам удобно. Если у вас уже есть дебетовая карта Тинькофф, встреча не понадобится: документы можно подписать кодом из СМС, а счет откроется практически сразу после оформления заявки. Если на бирже выходной или вы оставили заявку после 19:00 по московскому времени, откроем счет в ближайший рабочий день. Заполнить заявку на ИИС

Простые тарифы. На тарифе «Инвестор» есть только комиссия за сделки — всё остальное бесплатно. На тарифе «Трейдер» небольшая ежемесячная плата, но минимальная комиссия на любые виды сделок. 

Ввели плату 0,25% в месяц за хранение валюты суммой свыше 10 000 $, € и £

Это необходимо из-за роста рисков для российской валютной инфраструктуры при работе с иностранными финансовыми организациями. Плата распространяется только на валюту и не затрагивает валютные ценные бумаги.

Для расчета платы используется общая позиция по брокерским счетам и ИИС (кроме счетов Автоследования и Инвесткопилки). Позиция считается по каждой валюте отдельно: если у вас на счетах суммарно лежит 9000 $ и 9000 €, то плата вас не коснется. Если же на счетах лежит, например, 10 500 $, то плата будет взиматься только с суммы свыше 10 000 $, то есть с 500 $. Подробнее про комиссию на валютные позиции

Низкий порог входа. Можно начать инвестировать даже с 10 ₽ — примерно столько стоит один пай фондов «Вечного портфеля» от управляющей компании Тинькофф Капитал. Большинство облигаций стоят около 1000 ₽.

Помощь в подборе активов. Подборки акций и облигаций можно найти в приложении в разделе «Что купить». Там наши аналитики собирают данные о самых привлекательных компаниях — например, тех, что занимаются облачными вычислениями, производством роботов или разработкой вакцины от COVID-19.

Также с подбором ваших первых ценных бумаг поможет наш робот-советник. Ответьте всего на три вопроса, и он сформирует готовый список активов, которые лучше всего подходят именно вам. Как работает робот-советник

А если вы точно знаете, что ищете, подберите акции в скринере — это специальный фильтр, помогающий отобрать бумаги по множеству параметров: по дивидендному доходу, капитализации, финансовому рынку или принадлежности к производственному сектору.

Широкий диапазон доступных ценных бумаг. С ИИС в Тинькофф на Московской бирже можно купить акции, облигации и еврооблигации российских компаний, а также 11 валют и ряд биржевых фондов — ETF. На Санкт-Петербургской бирже можно купить еврооблигации российских компаний, а также акции многих американских, немецких и китайских компаний.

С 1 октября 2022 года покупать ценные бумаги из недружественных стран могут только квалифицированные инвесторы. Держать бумаги, купленные до 1 октября, можно и дальше — даже без статуса квалифицированного инвестора. Подробнее про новые ограничения

Мы следим за всеми обновлениями и оперативно информируем клиентов в Телеграм-канале Тинькофф Инвестиций.

Круглосуточная поддержка. Если у вас останутся вопросы, вы можете задать их в чате приложения Тинькофф Инвестиций или в личном кабинете на сайте tinkoff.ru. Отвечаем круглосуточно, в любой день недели — без праздников и выходных.

Главное различие между ними заключается в гарантированном доходе, который можно получить по ИИС за счет налогового вычета. Такой доход выражается либо в ежегодном возврате части уплаченного НДФЛ на сумму до 52 000 ₽, либо в возможности освободить ваш доход по сделкам с инвестициями от налога в 13%. Как работает налоговый вычет по ИИС

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

В то же время у индивидуального инвестиционного счета есть ряд ограничений, которых нет у обычного брокерского счета. Например, брокерских счетов у одного человека может быть несколько, но ИИС должен быть только один.

Еще ИИС нужно открыть минимум на 3 года — и в это время нельзя выводить с него деньги. Если вывести даже небольшую сумму, счет автоматически закроется. Если сделать это раньше чем через 3 года с момента его открытия, вы потеряете право на налоговый вычет. Подробнее про ограничения ИИС

Уже существующий у вас брокерский счет превратить в индивидуальный инвестиционный счет не получится — нужно отдельно открывать именно ИИС.

На ИИС можно заработать двумя способами: получать налоговые вычеты от государства, а также торговать на бирже, как и с обычным брокерским счетом.

С помощью налогового вычета можно гарантированно получать до 52 000 ₽ в год, если вы платите НДФЛ и пополняете ИИС каждый год на 400 000 ₽ и больше. Другой вариант: можно освободить ваш доход по сделкам от налога в 13% — это выгодно, когда выбранная вами инвестиционная стратегия приносит больше 52 000 ₽ в год. Какие есть типы ИИС

В дополнение к налоговым вычетам можно торговать на бирже: покупать и продавать валюту, совершать сделки с ценными бумагами и получать по ним выплаты в виде купонов и дивидендов.

Налоговый вычет по ИИС — простой способ заработать на инвестициях, даже если вы только знакомитесь с миром биржевой торговли. Про то, о чем важно знать на этому пути, рассказали в бесплатном курсе «А как инвестировать». Из него вы узнаете, как избежать самых частых ошибок начинающих инвесторов, как защитить деньги от инфляции и собрать свой первый диверсифицированный портфель. Посмотреть курс

Алгоритм действий будет зависеть от того, какой тип налогового вычета вы оформляете.

Вычет типа А — можно оформить при личном визите в ФНС, либо заполнив заявку онлайн на сайте налоговой.

Вычет типа Б — на него можно подать через вашего брокера непосредственно перед закрытием ИИС либо в налоговой инспекции — также лично или онлайн. Подробнее о налоговых вычетах по ИИС

ИИС лучше всего подходит для долгосрочных инвестиций — то есть для вложений на период в три года и больше. Он удобен как для начинающих инвесторов, так и для опытных трейдеров с доходной торговой стратегией.

Начинающие инвесторы могут получать ежегодный гарантированный доход до 52 000 ₽, если они платят НДФЛ и пополняют ИИС каждый год. Трейдеры могут освободить доход по ИИС от налога в 13%, если их стратегия торговли приносит больше 52 000 ₽ в год или если они не платят налоги как физическое лицо.

Открыть ИИС может любой гражданин России старше 18 лет, который платит налоги в России и имеет статус налогового резидента РФ. Для этого необязательно иметь постоянную регистрацию (прописку), достаточно находиться на территории России не менее 183 дней в году. Открыть ИИС

Вы не сможете открыть ИИС без гражданства РФ, даже если вы живете на территории России и платите налоги в ее казну.

ИИС открывается минимум на три года. Если вы захотите закрыть его до истечения этого срока, то потеряете право на налоговый вычет. А тот вычет, который уже успели получить, придется вернуть.

Например, если ИИС открыт 1 июня 2020 года, то без потери вычетов его можно закрыть 2 июня 2023 года или позже.

При этом через три года счет не закроется автоматически. Вы можете и дальше пользоваться индивидуальным инвестиционным счетом и продолжать получать ежегодные налоговые вычеты. Либо торговать на бирже с возможностью не платить налог при закрытии ИИС, если вы не оформляли по нему налоговый вычет на взносы.

Заполните короткую форму онлайн — весь процесс займет всего несколько минут. В конце подпишите заявление-анкету кодом из СМС.

Подождите, пока мы проверим ваши данные и откроем счет: на это уйдет около часа, а в редких случаях — до одного рабочего дня. Когда ИИС будет готов, отправим вам СМС и письмо на электронную почту. Кто может открыть ИИС

Если у вас еще нет продуктов Тинькофф, в течение 1—2 дней наш представитель привезет вам договор и карту Tinkoff Black — она нужна, чтобы круглосуточно и без комиссии пополнять ИИС. Пока карту не привезли, можно пополнить ИИС с карты другого банка и сразу начать инвестировать.

Тип ИИС не обязательно выбирать сразу — это можно сделать даже через три года после открытия счета. Тогда вы сможете оценить доходность своих инвестиций и посчитать, какой тип налогового вычета будет выгоднее.

Выбор типа ИИС происходит в момент, когда вы подаете документы на получение налогового вычета по вашему индивидуальному инвестиционному счету. Как выбрать тип ИИС

Самая простая и очевидная стратегия — пополнять ИИС каждый год и получать доход в виде налогового вычета. А чтобы деньги не лежали без дела и приносили дополнительный доход, можно покупать государственные облигации ОФЗ — это самый низкорисковый инструмент на финансовом рынке. Кроме того, ОФЗ будут приносить дополнительный доход в виде регулярных купонных выплат.

Подробнее про ОФЗ и другие типы облигаций

Доверительное управление ИИС — это договор между вами и брокером, по которому брокер совершает сделки на вашем ИИС с целью получить доход. За это брокер берет определенное денежное вознаграждение.

В Тинькофф Инвестициях нет услуг по доверительному управлению активами.

Если вы не хотите уделять инвестициям много времени, откройте ИИС и пополняйте его раз в год, чтобы получать гарантированные налоговые вычеты. А чтобы деньги не лежали на счете без дела и приносили доход, купите фонды Тинькофф Капитал.  Например, у нас есть фонды «Вечного портфеля» в рублях, долларах и евро. Они следуют стратегии покупки разных типов активов в равных долях: золота, акций, облигаций и валюты. Эти активы балансируют друг друга: когда какие-то из них теряют в цене, другие, наоборот, растут. В итоге такая стратегия помогает получать прибыль в любых условиях: при росте, стагнации или спаде в экономике.

Один пай фонда от Тинькофф Капитал стоит около 10 ₽, а клиенты Тинькофф Инвестиций могут торговать такими паями без комиссии за сделки. Подробнее про фонды от Тинькофф Капитал

ИИС — это специальный инвестиционный счет со льготным налоговым режимом, которым вы управляете самостоятельно.

ПИФ — это паевой инвестиционный фонд, то есть отдельная организация, которой вы даете свои деньги, и уже она вкладывает их, следуя определенной стратегии. При этом вы не можете напрямую управлять активами фонда и менять состав портфеля. А за покупку и продажу паев, как правило, есть дополнительные надбавки в несколько процентов со стороны управляющей компании.

С другой стороны, паи некоторых фондов можно купить и на ИИС. Для этого придумали биржевые паевые инвестиционные фонды (БПИФ) — они торгуются на бирже как обычные акции, а один пай является частичкой всего имущества фонда.

Например, паи фондов «Вечного портфеля» от управляющей компании Тинькофф Капитал следуют стратегии покупки разных типов активов с целью получить доход при любой фазе рынка: росте, падении или застое в экономике. Один пай фонда стоит около 10 ₽, а клиенты Тинькофф Инвестиций могут торговать такими паями без комиссии за сделки. Подробнее про фонды от Тинькофф Капитал

Пройдите наш бесплатный курс «А как инвестировать» — из него вы узнаете, как избежать самых частых ошибок начинающих инвесторов. Но если коротко, то вот несколько советов.

Диверсифицируйте — не вкладывайте все деньги в один актив, а лучше разложите их по разным инструментам. Собрать портфель из нескольких бумаг вам поможет наш робот-советник, а еще вы можете поискать варианты для вложений в разделе «Что купить» — в приложении Тинькофф Инвестиций и в личном кабинете на сайте tinkoff.ru. Как работает робот-советник

Инвестиционные идеи, подборки ценных бумаг от специалистов Тинькофф, а также другие инструменты, чтобы собрать свой первый инвестиционный портфель

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

Например, фонды от Тинькофф Капитал следуют за «Вечным портфелем» — это стратегия, базирующаяся на портфеле с равными долями активов, которые должны приносить доход независимо от текущего состояния на финансовых рынках. Подробнее про фонды от Тинькофф Капитал

Используйте торговые приказы — в приложении Тинькофф Инвестиций, а также в личном кабинете и в торговом терминале можно настроить специальные команды «стоп-лосс» и «тейк-профит». Они помогают ограничить убытки, когда ценные бумаги дешевеют, и вовремя зафиксировать прибыль, когда стоимость активов начинает расти. Подробнее про виды биржевых заявок

Закрыть счет можно в любой момент. Для этого в приложении Тинькофф Инвестиций на экране «Портфель» выберите ИИС → значок шестеренки в верхнем правом углу → «Закрыть счет».

В момент закрытия ИИС мы автоматически откроем для вас отдельный брокерский счет в Тинькофф и переведем ваши активы с ИИС туда. Процесс перевода займет до 30 дней и потребует от вас только подписать согласие на перевод по СМС-коду. В это время ценные бумаги будут заблокированы для сделок, поэтому их не получится продать в случае резкого изменения стоимости.

Помните, что если закрыть ИИС раньше, чем через 3 полных года с момента его открытия, вы потеряете право на налоговый вычет. А уже полученный вычет придется вернуть. Подробнее о том, как вывести деньги и закрыть ИИС

Что выгоднее, ПИФы или ИИС?

Из статья ты узнаешь следующие:

  1. Чем отличаются ИИС и ПИФ?
  2. Можно ли иметь ИИС и ПИФ одновременно?
  3. Какую комиссию взымают ПИФы?
  4. ИИС или Паевые фонды, что лучше для новичка?

Приветствую, дорогой читатель! Ты и без меня прекрасно знаешь, что на рынке существует множество разнообразных инструментов, которые можно использовать в своих целях. А сегодня мы поговорим о том, чем отличается ПИФ от ИИС. Также я хочу вам напомнить о том, что к выбору брокера стоит относиться осознанно, и работать с наиболее стабильными и надёжными компаниями.

Чем отличаются ИИС и ПИФ?

Говоря простым языком, Паевой инвестиционный фонд является своего рода структурой, которая привлекает средства инвесторов, вкладывая их в разнообразные ценные бумаги согласно выбранной стратегии. Естественно, за свои услуги Паевые фонды взымают определённую комиссию.

Если говорить об ИИС, то его принято считать разновидностью обычного брокерского счёта, которая даёт возможность получать некоторые налоговые льготы. Прошу учесть, что сам по себе ИИС нельзя считать инструментом, потому как сам по себе прибыли он не приносит. Он создавался с той цель, чтобы инвесторы активно вкладывали средства в отечественные активы, получая при этом различные льготы.

По сути дела, ИИС счет – это просто счёт, на который вы можете приобретать те или иные активы. А ПИФы являются инвестиционным инструментом, паи которого ты как раз можешь приобретать на свой ИИС.

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

Можно ли иметь ИИС и ПИФ одновременно?

Да, законом это не запрещено! Более того, на свой индивидуальный счёт ты можешь приобретать паи различных ПИФов. Мы снова приходим к тому, что ПИФ не является каким-то конкретным счётом, это чисто инвестиционный инструмент, который можно использовать в своих целях.

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

Какую комиссию взымают ПИФы?

Работать с Паевыми фондами достаточно просто, тебе лишь необходимо приобрести на свой счёт необходимые паи. Но каждый инвестор должен понимать, что ПИФы имеют далеко не самые гуманные комиссии. Например:

  • За покупку пая придётся отвалить в среднем от 2% до 4% от суммы покупки
  • За продажу пая комиссия в среднем составит от 1% до 3%
  • За управление активами фонд ещё за год будет взымать 4-6%

Получается, что за год в качестве комиссии инвестору придётся отвалить не менее 10% годовых. Опять же, напомню, что комиссию тебе придётся платить даже в том случае, если Фонд продемонстрирует отрицательную динамику.

Я считаю, что сравнивать эти два инструмента в подобном формате неправильно. Они сами по себе несравнимы, и созданы для разных целей и задач. Если говорить конкретно про ПИФы, то их весомым недостатком являются очень высокие комиссии. В этом отношении куда более привлекательно выглядят те же ETF.

По своей сути ETF очень похожи на ПИФы, но при этом комиссии там значительно ниже. Итого, можно сказать, что ИИС и ПИФы нельзя сравнивать между собой в контексте «Что лучше?». Я снова повторяю, что критическим недостатком ПИФов являются очень высокие комиссии. А потому, если Фонд покажет отрицательную динамику, то высокий уровень комиссионных ещё больше увеличит убытки.

Так что, специфика ИИС и ПИФов очень отличается, а потому нет смысла прямым образом сравнивать между собой эти два инструмента. А на этом всё, благодарствую за твоё внимание!

Что такое веб-сервер IIS: (Internet Information Services)?

В этом посте мы подробно рассмотрим IIS (Internet Information Services). Мы посмотрим, что он делает и как он работает. Вы узнаете, как включить его в Windows. И после того, как мы установим базовый уровень управления IIS с помощью графического интерфейса, вы увидите, как работать с ним с помощью интерфейса командной строки. Давайте начнем!



Что такое веб-сервер IIS?

Веб-сервер IIS работает на платформе Microsoft .NET в ОС Windows. Хотя можно запустить IIS на Linux и Mac с помощью Mono, это не рекомендуется и, вероятно, будет нестабильно. (Есть и другие варианты, которые я представлю позже). Он универсален и стабилен, и уже много лет широко используется в производстве. Версия 10 самая актуальная. После установки вы увидите эту страницу приветствия в своем браузере. «Терветулоа!»

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

Что такое веб-сервер?

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

Веб-сервер — это процесс для размещения веб-приложений. Веб-сервер позволяет приложению обрабатывать сообщения, поступающие через определенные порты TCP (по умолчанию). Например, порт по умолчанию для HTTP-трафика — 80, а для HTTPS — 443.

Когда вы посещаете веб-сайт в своем браузере, вы обычно не указываете номер порта, если только веб-сервер не настроен на получение трафика через порты, отличные от портов по умолчанию. Посещение http://www.example.com неявно отправит ваш запрос на порт 80. Вы можете указать номер порта, если хотите http://www.example.com:80, и https://www.example.com:443 для TLS (Transport Layer Security).

Если предположить, что конфигурация по умолчанию и TLS настроены для вашего веб-приложения, веб-сервер будет получать весь входящий трафик на порты 80 и 443. Что веб-сервер будет делать с трафиком оттуда, зависит. Существует бесчисленное множество вариантов того, как веб-сервер может обрабатывать эти запросы.

Как IIS обрабатывает веб-запросы?

Две основные модели процессов для веб-серверов — либо обрабатывать все запросы в одном потоке, либо создавать новый поток для каждого запроса. Хотя однопоточная модель (например, Node.js) имеет несколько доступных рабочих потоков, она обычно использует их только для определенных видов работы, таких как доступ к файловой системе. Модель потока на запрос, которую использует IIS (и его упрощенный родственник IIS Express), будет захватывать поток из пула потоков для каждого запроса.

Веб-серверы обычно обрабатывают запросы, используя шаблон запрос-ответ. Клиент отправляет запрос и получает ответ, если все идет хорошо. Протокол HTTP является распространенным выбором при общении между клиентом и веб-сервером через Интернет.

Функции

IIS имеет множество функций. Чаще всего IIS используется для размещения веб-приложений ASP.NET и статических веб-сайтов. Его также можно использовать в качестве FTP-сервера, размещать службы WCF и расширять для размещения веб-приложений, созданных на других платформах, таких как PHP.

Существуют встроенные параметры проверки подлинности, такие как базовая, ASP.NET и проверка подлинности Windows. Последнее полезно, если у вас есть среда Windows Active Directory — пользователи могут автоматически входить в веб-приложения, используя свою учетную запись домена. Другие встроенные функции безопасности включают управление сертификатами TLS и привязку для включения HTTPS и SFTP на ваших сайтах, фильтрацию запросов для внесения в белый или черный список трафика, правила авторизации, ведение журнала запросов и богатый набор параметров безопасности для FTP.

Одной из ключевых функций IIS является пул приложений. Нам нужно более подробно рассмотреть пул приложений, так как это критический компонент модели процесса IIS.

Неоценимой функцией является удаленное управление. IIS также можно управлять через интерфейс командной строки или с помощью PowerShell. Вы можете написать все, что угодно, и это здорово, если вам нравится сила, которая дает возможность сделать это.

К настоящему моменту у вас должно сложиться хорошее представление о конфигурируемости и универсальности IIS. Вы также должны знать, что его можно расширить для обслуживания (каламбур) многих целей, помимо размещения приложений ASP.NET. Благодаря расширению IIS становится очень универсальным и стабильным веб-сервером для платформы Windows. Давайте посмотрим, как установить IIS в Windows 10. (Тот же процесс применим к Windows 7 и 8.)

Настройка IIS

Назвать это «установкой» было бы слишком. В конце концов, IIS — это функция Windows. Что вам действительно нужно сделать, так это включить эту функцию. В Windows 10 вы можете нажать клавишу Windows и ввести «turn win». Вы должны увидеть «Включение или отключение функций Windows».

Выберите это, чтобы открыть диалоговое окно «Функции Windows». Отсюда вы можете включить всевозможные дополнительные функции, включая PowerShell 2.0, глубокое дерево каталогов параметров для служб IIS и подсистему для Linux. (Должен сказать, что последнее мне пригодилось много раз, например, когда приложение Node имеет несколько сценариев оболочки как часть сборки npm).

Информационные службы Интернета (IIS) — это то, что нам нужно!

Просто щелкнув по нему, вы получите хорошую отправную точку. Однако вы можете захотеть копнуть глубже. World Wide Web Services > Application Development Features — здесь вы включаете ASP.NET, CGI и протокол WebSocket. Вы всегда можете вернуться к этому, если вам нужно внести коррективы.

Чтобы включить IIS на Windows Server, вы можете использовать PowerShell или диспетчер сервера для установки «веб-роли (IIS)». Подробнее см. в этом пошаговом руководстве.

Выбрав все необходимые функции IIS, нажмите кнопку «ОК» и отправляйтесь за чашечкой свежего кофе. После завершения установки вы можете перейти к графическому интерфейсу IIS, введя «IIS» в поиске Windows или запустив «inetmgr».

Графический интерфейс

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

Прежде всего, есть три панели. Слева есть подключенные серверы. (Вы также можете подключаться к удаленным серверам.) На средней панели вы найдете все функции, такие как безопасность приложений, ведение журнала, фильтрация и перенаправление. Или, когда вы выберете «Просмотр содержимого», вместо этого вы увидите содержимое здесь посередине. Справа находится панель действий. Это меняется в зависимости от выбранного контекста.

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

СОВЕТ: вы можете щелкнуть правой кнопкой мыши большинство значков и использовать контекстное меню для выполнения наиболее распространенных действий.

Если вы развернете «соединение» на панели подключений, первое, что вы должны увидеть, это «Пулы приложений», а затем «Сайты». Мы собираемся сосредоточиться на них в следующих двух разделах.

Пулы приложений… Что это такое и как они работают?

Вот пулы приложений, настроенные по умолчанию в IIS. Как видите, есть и комбинации v2.0 и v4.0, и классические и интегрированные.

Интегрированный конвейер отличается от классического конвейера тем, что ASP.NET интегрирован в конвейер запросов IIS. В классическом режиме запросы должны были проходить через один конвейер для IIS и другой для ASP.NET. Интегрированный режим был предпочтительным с тех пор, как IIS 7 был выпущен с Windows Server 2008 и Vista. Не используйте классику, если в этом нет необходимости. То же самое касается версии 2.0. Они предназначены только для устаревшей поддержки. На самом деле, если вам не нужны эти пулы приложений, вы можете просто удалить их. Нам не нужно, чтобы всякая дрянь висела вокруг!

В одном пуле приложений одновременно может быть запущено от нуля до многих рабочих процессов (w3wp.exe). Рабочие процессы запускают экземпляры вашего приложения.

Создание пулов приложений

На панели «Действия» в правой части окна IIS нажмите «Добавить пул приложений…», чтобы открыть диалоговое окно. Это довольно просто. Обычно вы можете просто ввести имя и нажать «ввод» или нажать «ОК».

Вы также можете добавить пул приложений, щелкнув правой кнопкой мыши узел «Пулы приложений» на панели «Подключения». Предыдущий совет уже доказал свою ценность!

Пользователи пула приложений

IIS создает виртуального пользователя для каждого пула приложений (общая номенклатура для пула приложений). Эти рабочие процессы по умолчанию запускаются от имени виртуального пользователя пула приложений. Они могут работать от имени другого пользователя (например, учетной записи домена), если им нужны специальные разрешения.

Несмотря на то, что я удалил пулы приложений с сервера, виртуальные пользователи продолжают жить!

Эти виртуальные пользователи по-прежнему получают свои собственные стандартные папки, такие как «Рабочий стол», «Музыка» и «Изображения». Они не занимают так много места (110 МБ), но после удаления пула приложений эти пользовательские папки становятся бесполезными и могут быть удалены.

Повторное использование пула приложений

Одной из ключевых функций пулов приложений является повторное использование. По умолчанию пулы приложений перезапускаются каждые 1740 минут (29 часов) и при изменении файла конфигурации. Вы можете настроить переработку в соответствии с вашими потребностями. Перезапуск пула приложений освобождает память, потребляемую приложениями, работающими в пуле приложений. Повторное использование может помешать безудержным процессам потреблять всю память на вашем сервере.

Какие процессы используют память в вашем процессе? Все в стеке и куче — статические переменные и свойства, все в кеше памяти, любые объекты, на которые ссылается другой объект, любые блоки памяти, ожидающие сборки мусора, вы получаете картину.

Вы можете выбрать, какие события вы хотите регистрировать (или не регистрировать). Как видите, не все параметры показаны в предыдущем диалоговом окне — «События перезапуска во время выполнения» не настраиваются. Это не совсем так.

Перезапуск запускает новый процесс, а затем останавливает текущий процесс. Новый процесс, как и следовало ожидать, будет иметь новый PID. Вы можете изменить это поведение, а также другое поведение повторного использования в «Дополнительных настройках…». На самом деле, вы можете отредактировать любую из конфигураций утилизации в этом меню. Диалог «Переработка…» в этом отношении излишен. Однако здесь вы можете отключить повторное использование изменений конфигурации. Хотя вы, наверное, не хотите. Ваше работающее приложение не будет получать обновления конфигурации.

Обратите внимание, что «перекрывающаяся переработка» подразумевает, что возможно иметь более одного экземпляра приложения. Вы должны отключить это, только если ваше приложение требует этого. Перекрывающийся повторный цикл предотвращает сбои, которые могли бы произойти, если бы повторный цикл ждал, пока текущий процесс истощит запросы, прежде чем запускать новый процесс. Другими словами, никакие новые запросы не будут обрабатываться до тех пор, пока не будут выполнены текущие запросы или не истечет настраиваемый период ожидания (по умолчанию 90 секунд).

Расширенная конфигурация

Слишком много конфигураций пула приложений, чтобы подробно повторять их в этом посте. На данный момент будет достаточно краткого обзора. Я быстро расскажу о каждой из областей «Дополнительных настроек», как показано ниже.

  • Настройка «Общие» позволит вам
    • Изменить версии .NET CLR
    • Разрешить 32-разрядные приложения
    • Изменить режим конвейера
    • Установить длину очереди (по умолчанию 1000 запросов)
    • Настроить на постоянный запуск или по требованию
  • Опция «ЦП» охватывает
    • Дросселирование
    • Привязка процессора
  • «Модель процесса» позволит вам выбрать настройки для
    • Личность
    • Тайм-аут простоя
    • Максимальное количество рабочих процессов
    • Мониторинг работоспособности (вы должны отключить это локально для отладки, потому что остановленный отладчик не будет отвечать на эхо-запрос)
  • «Отключение процессов» полезно для отладки не отвечающих процессов
  • «Защита от быстрого сбоя» удобна, когда вы хотите настроить реакцию балансировщика нагрузки на сбои

Сайты

«Сайты» — это узел рядом с «Пулы приложений» в узле сервера диспетчера IIS. Именно здесь вы можете добавлять веб-сайты и FTP-сайты (если они установлены) и управлять ими. В то время как пулы приложений имеют диалоговое окно расширенных настроек, сайты имеют гораздо больше параметров конфигурации! Сайты имеют множество функций, каждая из которых имеет свои собственные настройки.

Эти функции относятся к трем заголовкам в диспетчере IIS:

  • ASP.NET (если он у вас установлен)
  • ИИС
  • Менеджмент

Контекстное меню

Вы можете переключаться между «Функциями» и «Содержимым», когда у вас выбран сайт. Вы можете щелкнуть сайт правой кнопкой мыши и открыть папку из контекстного меню, выбрав «Исследовать». Есть и другие вещи, которые вы можете сделать из этого контекстного меню, например, права на редактирование.

На самом деле это просто вызывает свойства папки сайта. Оттуда вам нужно будет перейти на вкладку «Безопасность», чтобы фактически изменить разрешения.

Как и в Windows, существует несколько других способов редактирования разрешений. Дополнительные сведения о том, как установить права доступа к папкам, см. на ваших любимых справочных сайтах Windows.

Вы можете выполнить несколько общих задач из контекстного меню. Внутри пункта «Управление веб-сайтом» вы можете запускать и останавливать веб-сайт, открывать его в браузере и переходить к дополнительным настройкам. Мы определенно хотим взглянуть на них, но сначала давайте поговорим о том, что вы увидите, когда выберете «Редактировать привязки…», который также доступен на панели «Действие» как «Привязки…».

Bindings

Вам потребуется добавить привязку к сайту в диалоговом окне «Bindings…», если вы включаете HTTPS для своего сайта. Там же можно указать имя хоста и номера портов. Если у вас есть дополнительные привязки для вашего сайта, вы также можете добавить их сюда. Возможно, вы используете привязки net.tcp или net.pipe (если вы добавили функции на сервер и включили их для сайта). Или вы можете установить IP-адрес здесь.

Можно запустить несколько сайтов, прослушивающих один и тот же порт. Для этого вы будете использовать разные имена хостов. Например, вы можете связать admin.example.com с вашим сайтом администратора, а blog.example.com — с вашим блогом. Весь трафик example.com будет направляться на один и тот же IP-адрес (балансировщик нагрузки/сервер), но IIS будет использовать заголовок хоста для направления трафика на соответствующий сайт. Они также полезны для приложений с белой этикеткой: acme.example.com, foo.example.com, bar.example.com.

Основные настройки

«Основные настройки…» — это то же самое диалоговое окно, которое появляется при первой настройке сайта. Вам, вероятно, не понадобится туда заходить, если только вы не хотите изменить пул приложений или местоположение сайта или если вы хотите подключиться как другой пользователь, а не как IUSR (сквозной доступ). Если вам нужно использовать учетную запись службы для доступа к каталогу сайта, вы можете выбрать «Подключиться как…» в диалоговом окне «Редактировать сайт».

Примечание: вам следует позаботиться о защите всех каталогов, которые вы используете в IIS. Вам будет полезно прочитать о том, как защищен каталог inetpub по умолчанию.

Дочерние сайты и виртуальные каталоги

Вы можете размещать несколько приложений и виртуальных каталогов на одном сайте. Приложения могут работать в своих собственных пулах приложений, а виртуальные каталоги — нет. Как показано ниже, я настроил приложение администратора и виртуальный каталог блога на Site2. Доступ к ним можно получить с помощью http://localhost/admin и http://localhost/blog. Оба ответят встроенными страницами ошибок, если в каталогах нет чего-либо.

Исходные каталоги для подприложений и виртуальных каталогов не обязательно должны быть подкаталогами родительского сайта. Вы можете хранить эти каталоги где угодно. Вы можете сопоставить некоторые общие веб-ресурсы (изображения или JS-файлы) с относительным путем для нескольких сайтов. Виртуальные каталоги идеально подходят для этого.

Документы по умолчанию и ошибки

Когда пользователь посещает корень вашего сайта (www. example.com/), ему будет представлен документ по умолчанию. Значения по умолчанию показаны ниже. Вы можете добавлять свои собственные документы, удалять документы или вообще отключать их. Если вы отключите их, пользователь получит уродливый экран с ошибкой 403, если вы не дали разрешение на просмотр содержимого папки (не рекомендуется). Лучше всего иметь документ по умолчанию.

Я поместил индексный документ в каждый каталог: сайт, приложение и виртуальный каталог.

  • Зона 2
    • Админ
      • index.html
    • Блог
      • index.html
    • index.html
  • http://localhost/ загрузит документ по умолчанию на Site2/index.html
  • http://localhost/admin/ загрузит документ по умолчанию в Site2/Admin/index.html
  • http://localhost/blog/ загрузит документ по умолчанию в Site2/Blog/index.html

Если вы беспокоитесь о том, что IIS будет занимать память и ЦП на вашем компьютере, не беспокойтесь. Если рабочие процессы не запущены (и не обрабатывают запросы с интенсивной обработкой), он простаивает. Если вы наблюдаете высокую загрузку ЦП, это руководство по устранению неполадок может помочь, если вы используете ASP.NET.

Интерфейс командной строки и удаленное управление

AppCmd.exe

AppCmd ​​— это встроенный инструмент командной строки для настройки и управления IIS. Вы можете использовать его для создания сайтов и пулов приложений, связывания виртуальных каталогов и редактирования конфигураций. Давайте посмотрим на несколько вещей, которые он может сделать.

Прежде всего, добавьте %systemroot%\system32\inetsrv\ к вашему пути, чтобы вы могли запускать appcmd из командной строки в любом месте.

Запустите командную строку от имени администратора.

 setx ПУТЬ "%ПУТЬ%;  %systemroot%\system32\inetsrv\ "
 

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

  • Запустите appcmd /? чтобы увидеть текст справки
  • Посмотрите, какие приложения работают с приложением списка appcmd
  • Используйте резервную копию списка appcmd для просмотра резервных копий конфигурации IIS

Добавить сайт

 appcmd добавить сайт /name:"Dummy Site" /id:10 /bindings:http/*:81:
 

Теперь снова список приложений. Вы не увидите добавленный вами новый сайт, потому что он не считается приложением. Если вы перейдете к графическому интерфейсу и обновите свои сайты, вы увидите там новый сайт, но он будет сломан. Нам нужно добавить приложение с помощью appcmd.

 appcmd добавить приложение /site.name:"фиктивный сайт" /путь:"/"
 

Это добавит приложение только в корень сайта. Это создаст приложение с именем «Dummy Site/». Нам все еще нужно связать приложение с виртуальным каталогом, а затем указать физический путь.

 appcmd add vdir /app.name:"фиктивный сайт/" путь:"/"
appcmd set vdir "Dummy Site/" /physicalPath:"c:\inetpub\wwwroot"
 

Это подробный способ использования appcmd для создания сайта IIS. Есть более простой способ.

Путь EZ

Вы можете сэкономить много нажатий клавиш при создании сайта, если установите параметр PhysicalPath в первой команде. Это сделает все за один раз:

 appcmd add site /name:"Dummy Site" /id:10 /bindings:http/*:81: /physicalPath:"c:\inetpub\wwwroot"
 

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

Развертывание обновлений

Чтобы дать вам еще одно представление об использовании appcmd, попробуйте сделать следующее:

  1. Создайте папку «sites».
  2. Создайте подпапку для каждого сайта.
  3. Разверните версии во вложенных папках каждой из них.
  4. Стадия новых версий.
  5. Используйте appcmd, чтобы обновить сайт для использования новой папки.

При наличии приложения с именем «Hello World», указывающего на C:\Sites\HelloWorld\1.0.0, и новой сборки «1.0.1», которая была размещена в C:\Sites\HelloWorld\1.0.1 , когда пришло время go live, то вы можете использовать следующую команду, чтобы перевернуть сайт на новую версию:

 appcmd set vdir "фиктивный сайт/" /physicalPath:"c:\Sites\HelloWorld\1. 0.1"
appcmd перерабатывает пул приложений /apppool.name:defaultapppool
 

И если вам нужно откатить свой сайт, выполните следующее:

 appcmd set vdir "Dummy Site/" /physicalPath:"c:\Sites\HelloWorld\1.0.0"
appcmd перерабатывает пул приложений /apppool.name:defaultapppool
 

Вот отличное руководство от Microsoft с дополнительной информацией об использовании AppCmd.

Сброс IIS

«iisreset» — это отдельный исполняемый файл, используемый для остановки, запуска, перезапуска IIS или события для перезагрузки компьютера (/REBOOT). Вы можете передать ему параметр «имя компьютера», чтобы он управлял IIS на другом компьютере. Вам нужно будет запустить это как администратор. Многие разработчики и системные администраторы любят использовать это после развертывания, и это тоже неплохая идея!

PowerShell

PowerShell имеет мощный набор инструментов для управления IIS. Вы также можете отправить команду iisreset удаленно, используя Invoke-Command -ComputerName «computername» -ScriptBlock {iisreset}, при условии, что вы разрешаете удаленный вызов произвольных команд на своих серверах — и это, как правило, не очень хорошая идея!

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

Завершение работы

Несмотря на все функции, конфигурации и команды, которые мы рассмотрели в этом посте, мы только коснулись поверхности. Каждая функция имеет свои собственные конфигурации, и существует множество расширений, которые можно добавить, установив расширение установщика веб-платформы.

И на этом давайте подведем итог этому сообщению и серверу IIS:

iisreset /stop

Но прежде чем мы полностью закончим эту статью, имейте в виду, что существуют такие решения, как Stackify Retrace, которые могут помочь вам с вашим Путешествие по ИИС. Retrace — это решение для управления производительностью приложений (APM), которое может предоставить показатели работоспособности сервера и интеграцию журнала ошибок, что повышает производительность вашего приложения.

Попробуйте бесплатную 14-дневную пробную версию сегодня!

Воспользуйтесь бесплатным профилировщиком кода Stackify Prefix, чтобы писать лучший код на своей рабочей станции. Префикс работает с .NET, Java, PHP, Node.js, Ruby и Python.

  • Об авторе
  • Последние сообщения

О Филе Вуолле

Фил Вуоллет использует программное обеспечение для автоматизации процессов, чтобы повысить эффективность и повторяемость. Он пишет на темы, связанные с технологиями и бизнесом, иногда выступает с докладами на те же темы и является семейным человеком, который любит играть в футбол и настольные игры со своими детьми.

  • Получение подробных сведений об исключениях с помощью Retrace — 28 октября 2021 г.
  • Учебное пособие по ведению журнала Node.js — 14 мая 2021 г. 4, 2019
  • Улучшите производительность MySQL с помощью этого руководства — 27 ноября 2018 г.

Пул потоков IIS (экспертное руководство)

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

Эти проблемы могут негативно повлиять на производительность вашего сайта.

Но, наверное, не так, как вы думаете!

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

Наконец, мы разберем алгоритм пула потоков IIS и параметры пула потоков IIS, которые вы можете (а не можете) изменить, чтобы настроить его на свою рабочую нагрузку.

Что такое пул потоков IIS

Пул потоков IIS поддерживает потоки, предназначенные для быстрого удаления запросов из очереди пула приложений и их обработки внутри рабочего процесса IIS.

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

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

Как работает пул потоков IIS

Прежде чем копнуть глубже, давайте посмотрим, как работает пул потоков IIS.

Когда рабочий процесс запускается впервые, он создает минимальное количество потоков IIS в пуле потоков IIS. Затем эти потоки будут:

  1. Получение запросов из очереди пула приложений.
  2. Настройте «машину состояний» запроса (создайте экземпляры объектов запроса и получите необходимую конфигурацию для URL-адреса запроса).
  3. Выполнение конвейера запросов (вызов модулей, зарегистрированных для каждого этапа конвейера, например BeginRequest, AuthenticateRequest и т. д.).
    ПРИМЕЧАНИЕ. Большая часть «фактической» обработки запросов происходит в потоках приложения, как мы увидим ниже.
  4. Сбросить ответ в конце запроса.

Для простой рабочей нагрузки статического файла весь запрос может быть обработан в одном потоке IIS (на данный момент игнорируя любые асинхронные переключатели).

Однако реальность такова, что большая часть функциональности веб-сайта реализуется через инфраструктуру приложений, такую ​​как ASP. NET, ядро ​​ASP.NET, классический ASP, PHP (через FastCGI) и так далее.

Большая часть обработки запросов приложений выполняется в потоках пула потоков приложений, таких как пул потоков CLR для запросов ASP.NET и ASP.NET Core, классический пул потоков ASP для сценариев ASP и т. д.

В результате потоки IIS выполняют минимальную обработку запросов и почти никогда не блокируются.

Обработка запросов почти всегда перемещается в пул потоков приложений

Для большинства приложений основная часть обработки запросов НЕ будет выполняться в потоках IIS . Вместо этого самое первое, что сделает модуль структуры приложения (например, webengine.dll для ASP.NET, AspNetCoreModule, asp.dll или FastCGI), — поставит обработку в очередь в собственный пул потоков.

Трассировка LeanSentry показывает, что обработка запроса быстро переключается на поток ASP.NET (рабочий поток CLR).

Например, пул потоков CLR для ASP. NET. Когда IIS сталкивается с любым модулем ASP.NET, включая обработчик, выполняющий действия вашего контроллера MVC, действия WebAPI или устаревшие страницы ASPX, он ставит обработку запроса в очередь в пул потоков CLR, где рабочие потоки CLR выбирают его для выполнения логики приложения.

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

История переключения потоков ASP.NET в IIS

Раньше это происходило всякий раз, когда конвейер обработки запросов получал стадию «ExecuteRequestHandler», то есть стадию, на которой логика приложения обрабатывает запрос и создает ответ.

Фактически, до того, как мы создали интегрированный конвейер в IIS 7.0, обработка запросов ASP.NET была реализована с помощью ASPNET_ISAPI.dll, которая была эффективно зарегистрирована для этапа выполнения обработчика. В результате вы не могли использовать конвейер ASP.NET для расширения каких-либо других частей обработки запросов IIS, таких как проверка подлинности, авторизация или кэширование.

В интегрированном режиме (по умолчанию в IIS 7.0+) конвейер ASP.NET стал накладываться на конвейер IIS, поэтому вы могли зарегистрировать модули ASP.NET для запуска практически на каждом этапе конвейера IIS. В результате большая часть обработки запросов теперь будет выполняться в рабочих потоках CLR, поскольку запрос будет поставлен в очередь в пул потоков CLR, как только в конвейере встретится первый модуль .NET.

Из соображений производительности обработка запроса будет продолжаться в потоке CLR даже для модулей IIS, возможно, до самого конца запроса. Вместо того, чтобы возвращать управление обратно в IIS после завершения модуля ASP.NET, механизм ASP.NET будет «извлекать» любые последующие уведомления модуля IIS и выполнять их на месте. Это позволило нам избежать затрат на повторный ввод управляемого кода позже и соответствовать строгим критериям производительности, требуемым организацией Windows для поставки интегрированного конвейера.

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

Для получения подробной информации о многопоточности IIS и ASP.NET ознакомьтесь с подробным сообщением в блоге Томаса Марквардта (Томас был ведущим разработчиком интегрированного конвейера ASP.NET и помог нам преодолеть все трудности, связанные с производительностью).

Мониторинг производительности пула потоков IIS

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

На самом деле потоки IIS почти никогда не блокируются в современных приложениях.

Поскольку длительные операции или операции блокировки потока выполняются внутри кода приложения, вместо этого они блокируют поток приложения, а не поток IIS. Таким образом, хотя зависания из-за истощения пула потоков CLR очень распространены, это вообще не имеет ничего общего с пулом потоков IIS.

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

К счастью, такие случаи очень легко распознать, если знать, где искать.

Исчерпание пула потоков IIS

Поскольку потоки IIS отвечают за удаление запросов из очереди пула приложений, основным эффектом исчерпания пула потоков IIS является… растущая очередь пула приложений!

Вы можете наблюдать это со следующими счетчиками:

  1. HTTP Service Request Queues\CurrentQueueSize (): количество запросов, находящихся в настоящее время в очереди пула приложений
  2. Очереди запросов на обслуживание HTTP\RejectedRequests (): общее количество отклоненных запросов (вероятно, из-за 503/переполнения очереди*)
  3. W3SVC_W3WP\Active Threads Count (_): количество потоков IIS в конкретном рабочем процессе IIS.

Счетчик активных потоков IIS показывает 0, в то время как активные запросы IIS показывают 8 одновременных запросов.

У вас может быть истощение пула потоков IIS или исчерпание пула потоков, если:

  1. У вас ненулевая очередь пула приложений,

    И

  2. Количество активных потоков в рабочем процессе (счетчик «Active Thread Count») больше нуля.

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

Если число больше, чем параметр IIS max threads, ваш рабочий процесс достиг предела пула потоков IIS для потоков и испытывает исчерпание пула потоков.

(исчерпание пула потоков IIS ОЧЕНЬ маловероятно, поскольку потоки IIS почти никогда не блокируются)

*Обратите внимание, что запросы могут быть отклонены с ответом 503 из-за сбоев других пулов приложений, включая пул приложений, который был отключен или переведен в автономный режим из-за повторяющихся сбоев. Последнее может быть вызвано функцией IIS Rapid Fail Protection.

Далее мы рассмотрим логику определения основных причин исчерпания пула потоков IIS.

Однако, если вы уже настроили LeanSentry на сервере для диагностики производства, он автоматически предупредит вас о серьезных инцидентах 503 Queue Full и других сбоях пула приложений:


Диагностика сбоев пула приложений LeanSentry определяет основную причину ошибок 503 и сбоев пула приложений.

Это включает в себя ТЯЖЕЛУЮ работу по определению код приложения, косвенно вызывающий очередь , например. код, блокирующий потоки IIS, или код приложения, вызывающий перегрузку ЦП (что, в свою очередь, вызывает голодание пула потоков IIS и постановку в очередь).

LeanSentry отслеживает низкую производительность пула потоков IIS в фоновом режиме, даже если у вас нет 503, и выполняет диагностику, чтобы помочь вам упреждающе оптимизировать ваше приложение:

Оценка производительности LeanSentry включает мониторинг пула потоков IIS на предмет возможных проблем с голоданием и блокировкой .

Без лишних слов давайте рассмотрим конкретные причины истощения пула потоков IIS и способы их диагностики и устранения.

Что вызывает исчерпание пула потоков IIS

На основе диагностики зависаний и очередей для более чем 30 000 веб-сайтов IIS за последние 10 лет мы можем с уверенностью сказать, что исчерпание пула потоков IIS имеет следующие распространенные причины:

  1. Перегрузка процессора
  2. Блокировка потока из-за инициализации приложения
  3. Блокировка потока из-за медленного доступа к файлу или сети

Перегрузка ЦП, вызывающая истощение пула потоков

Когда ЦП сервера перегружен, обычно быстрые задачи удаления запросов из очереди пула приложений и обработки модулей IIS (например, динамическое сжатие) могут занять больше времени.

В результате IIS потребуется больше потоков для продолжения исключения из очереди входящих запросов.

Вы можете обнаружить этот случай следующим образом:

  1. Сервер имеет высокую очередь процессора: System\Processor Queue Length >= 10 или значительно выше нормы

    И/ИЛИ

  2. Сервер имеет очень высокую загрузку процессора: Processor\% Processor Time (_Total) счетчик производительности >= 90%

    И

  3. Много активных потоков IIS: WAS_W3WP\Active Threads Count (_) больше нуля

Что интересно в этом случае, так это то, что вы не обязательно хотите иметь больше потоков в системе, когда ЦП уже перегружен. Поскольку затраты ЦП на фактическую обработку запроса, особенно на уровне приложений, на несколько порядков превышают затраты на обработку запросов IIS, введение дополнительных запросов в систему усугубит проблему.

Поэтому ответ здесь НЕ добавлять больше потоков IIS . Это также не увеличивает параллелизм порта выполнения IIS (см. раздел о настройке пула потоков IIS).

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

Если на вашем сервере установлен LeanSentry, он автоматически идентифицирует пул процессов/приложений, вызывающий перегрузку ЦП, и использует диагностику ЦП для определения кода, способствующего перегрузке ЦП. Затем вы можете использовать отчет для настройки неисправного кода:

Чтобы исправить ошибки 503 Queue full из-за истощения пула IIS или перегрузки ЦП:

  1. Оптимизируйте код приложения, вызывающий перегрузку ЦП. .

Если вы сейчас в отчаянии, вы также можете:

  1. Раскрутить больше узлов (чтобы лучше распределить рабочую нагрузку)
  2. Добавить ядра ЦП/увеличить пропускную способность ЦП.

Потоки IIS заблокированы при инициализации приложения

При первом запуске приложения ASP.NET потоки IIS, обрабатывающие запросы к этому приложению, будут заблокированы при блокировке приложения.

Это может привести к исчерпанию пула потоков IIS, если запуск приложения занимает много времени, например. из-за длительной загрузки данных или сетевой задержки в Application_Start. Если это происходит во время большого трафика, сотни потоков IIS могут быть заблокированы, что приведет к исчерпанию пула потоков IIS, возникновению очередей и проблемам 503/queue full.

Когда происходит инициализация приложения, вы увидите, как активные потоки IIS увеличиваются до общего числа одновременных запросов к приложению. Потоки IIS теперь блокируются!

Если у вас есть LeanSentry, диагностирующий ваши зависания, вы можете заметить, что 1 поток IIS заблокирован в пути инициализации приложения ASP.NET, а другие потоки IIS заблокированы в вызове W3_CONTEXT::SetupStateMachine (ожидание завершения инициализации приложения):

Вот трассировка стека обоих:

Если вы перерабатываете или перезапускаете свое приложение в рабочей среде, чтобы решить проблему с производительностью, такую ​​как зависание или утечка памяти, вы можете непреднамеренно вызвать истощение пула потоков IIS и сбой 503/очереди.

Лучший ответ здесь — решить основную проблему с зависанием или памятью, чтобы она не повторялась, вместо того, чтобы использовать перезапуски в качестве пластыря. Если у вас есть LeanSentry, вы можете использовать диагностику зависаний или диагностику памяти, чтобы выявлять и диагностировать проблемы на рабочем веб-сайте.

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

Потоки IIS заблокированы из-за медленного доступа к сети

Когда запрос получен впервые, поток IIS выполнит «настройку запроса», которая включает:

  1. Получение конфигурации web.config для запрошенного URL-адреса.
  2. Доступ к информации о запрашиваемом файле

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

В этом случае поток IIS может быть заблокирован, что приведет к исчерпанию пула потоков. В этом случае потоки IIS будут заблокированы в W3_CONTEXT::SetupStateMachine следующим образом (с использованием графа потоков из диагностики зависания LeanSentry):

Чтобы решить эту проблему, вы можете попробовать:

  1. Переместите файлы приложения в файловую систему локального сервера (вместо удаленной общей папки)
  2. Устраните сбои в работе сети, которые могут вызывать длительные задержки доступа к файлам на сетевом ресурсе.
  3. Уменьшите нагрузку на сетевое файловое устройство (например, уменьшив количество ожидающих уведомлений об изменении файлов).

Когда увеличить предел потока IIS

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

Обратите внимание, что эта конфигурация НУЛЕВАЯ влияет на потоки приложения, которые выполняют основную часть обработки запроса, как мы узнали выше. В результате любые зависания из-за исчерпания пула потоков не будут устранены путем увеличения числа потоков IIS.

Если вы используете LeanSentry, вы можете убедиться, что в пуле потоков IIS заканчиваются потоки. Диагностические отчеты LeanSentry отображают потоки IIS и ASP.NET (а также любые асинхронные задачи), чтобы определить, где происходит зависание. Если отчет о диагностике зависаний указывает на исчерпание пула потоков, вы можете визуально увидеть это в представлении отчета Thread Analysis :

  1. Если у вас Исчерпание пула потоков IIS , у вас будет 0 «припаркованных» потоков IIS, и все доступные потоки IIS будут запущены или ожидают.
  2. Если у вас исчерпание пула потоков ASP.NET (исчерпание рабочего потока CLR), вы увидите все доступные рабочие потоки CLR, ожидающие или работающие, с 0 припаркованными потоками:

Таким образом, если у вас есть припаркованные (доступные) потоки IIS, у вас нет исчерпания пула потоков IIS и, скорее всего, вы не получите выгоды от увеличения количества доступных потоков IIS.

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

На мой взгляд, увеличение размера пула потоков IIS ПОЧТИ никогда не требуется. Но вы можете подумать о том, чтобы сделать это в этих очень конкретных обстоятельствах:

  1. У вашего сервера высокий RPS, и он подвергается всплескам трафика, что приводит к ошибкам очереди пула приложений/503 (но без перегрузки ЦП). Вы можете извлечь выгоду из большего начального размера пула потоков IIS, чтобы можно было быстрее исключать из очереди пакетные запросы.
  2. У вас есть временные блокировки пула потоков IIS из-за инициализации приложения или доступа к сетевым файлам, которые разрешаются через несколько секунд. Увеличение размера пула потоков IIS может помочь вам справиться с этими временными проблемами.

Далее мы рассмотрим конкретные методы настройки пула потоков IIS.

Конфигурация пула потоков IIS

Чтобы изменить способ работы пула потоков IIS и количество потоков, которые он предоставляет для вашей рабочей нагрузки, вы можете изменить ряд значений реестра в разделе реестра HKLM\System\CurrentControlSet\Services\InetInfo\Parameters.

Вот все ключи реестра, которые вы можете изменить для управления пулом потоков:

Значение реестра По умолчанию
Макспултредс

Настроенное максимальное количество потоков (на процессор) в пуле потоков IIS. Обратите внимание, что пул потоков имеет жесткое ограничение PoolThreadLimit, ниже которого не более 256 потоков. Подробнее здесь.

20 * количество ядер процессора
Пултреадлимит

«Жесткое» ограничение на максимальное количество потоков в пуле потоков IIS. Это ограничение может быть установлено в диапазоне от 64 до 256, поэтому вы не можете иметь более 256 потоков IIS в пуле независимо от настроек. Подробнее здесь.

Зависит от доступной памяти.
ThreadTimeout

Время, по истечении которого неиспользуемый поток IIS удаляется из пула. Подробнее здесь.

1800 секунд
ThreadPoolStartupThreadCount

Количество потоков, которые рабочий процесс IIS создает при запуске.

1 * количество ядер процессора, минимум 4.
ThreadPoolMaxCPU

IIS не создает потоки пула потоков, если загрузка ЦП на сервере превышает это значение.

95%
ThreadPoolStartDelay

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

1 секунда
ThreadPoolExactThreadCount

Если установлено значение 1, рабочий процесс IIS настраивается на запуск такого количества потоков вместо использования алгоритма потока по умолчанию.

0 (отключено)
Максимальный параллелизм

Количество потоков IIS, которым разрешено одновременно получать запросы от порта завершения. Подробнее здесь.

0 (количество ядер процессора)

Пул потоков создает ThreadPoolStartupThreadCount (1 * количество ядер процессора по умолчанию) потоков при запуске рабочего процесса. Затем, если все потоки заняты получением запросов или выполнением других задач по обработке запросов, пул потоков создает 1 поток каждые ThreadPoolStartDelay секунды (по умолчанию 1 секунда). Это продолжается до предела MaxPoolThreads * количество ядер процессора (20 * ядер процессора по умолчанию) или до достижения жесткого предела PoolThreadLimit .

Если потоков больше, чем необходимо, IIS удалит поток после ThreadTimeout (по умолчанию 1800 секунд).

Обычно я рассматриваю следующие оптимизации:

  1. Если вы столкнулись с исчерпанием пула потоков, вы можете увеличить предел, увеличив MaxPoolThreads (на процессор) и PoolThreadLimit (абсолютный жесткий предел).
  2. Если вы столкнулись с нехваткой пула потоков, что означает, что IIS не создает потоки достаточно быстро, чтобы обработать временный всплеск запросов, вы можете поднять ThreadPoolStartupThreadCount , чтобы сразу иметь больше потоков.
  3. РЕДКИЙ: если у вас очень высокая рабочая нагрузка RPS и ваши потоки IIS блокируются (например, из-за специального модуля IIS, который блокирует поток на короткое время), вы можете рассмотреть возможность увеличения MaxConcurrency , чтобы разрешить более 1 поток/процессор для удаления входящих запросов из очереди. Это чрезвычайно редкий случай… Лично я не видел такого в продакшене, кроме ScaleUP, нашего собственного механизма асинхронной загрузки.

ПРИМЕЧАНИЕ. Обязательно перезапустите любой пул приложений на сервере, чтобы применить эти настройки для его рабочих процессов (IIS не улавливает автоматически изменения в ключах реестра).

Примечание о конфликте потоков

Конкуренция за потоки — это негативный эффект наличия слишком большого количества потоков в системе. По сути, это обратная сторона медали истощения пула потоков.

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

Вот почему IIS по умолчанию разрешает только 1 потоку на ядро ​​процессора активно удалять запросы из очереди (эта настройка MaxConcurrency). В рабочей нагрузке, привязанной к ЦП, наличие большего количества потоков не приводит к более высокому количеству запросов в секунду, а вместо этого приводит к более низкому количеству запросов в секунду, поскольку на переключение контекста расходуется большая часть пропускной способности процессора.

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

Заключение

В заключение, исчерпание пула потоков IIS происходит редко.

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