Администрирование
16
Ноя
9

Трактат о производительности MS CRM. Книга III: настройка IIS

На примере IIS 7.x … 🙂

Обновление КЭШа

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

В результате элементы Microsoft Dynamics CRM будут загружаться во временные файлы и втечении 15 дней не будет проверятся налитчие новых версий.
Откойте менеджер IIS – щелкните по сайту Microsoft Dynamics CRM – в представлении Features View откройте HTTP Response Headers – на панели Actions (прилеплена к правой стороне окна) щелкните по Set Common Headers – и задайте значение для Expire.

Примечание: изменения вступят в силу на клиентских компьютерах после истечения срока текущих настроек.


IIS7 Output Caching

Веб-содержимое может быть разделено на две категории: статическое информационное наполнение и динамическое информационное наполнение. Статическое информационное наполнение не изменяется от запроса к запросу. Примером статического информационного наполнения являются файлы HTML, JPG или GIF.
Динамическое же информационное наполнение изменяется с каждым запросом. Например, ASP.NET или PHP страницы.

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

Возможность IIS 7.0 Output Caching, как раз и предназначается для полудинамического контекта (но также может кэшировать и статический контент). Она позволяет Вам кэшировать отдельные (статические) копии ответов динамических запросов, основываясь на строке запроса.

Что для этого нужно…

  • Откройте IIS, выберите сайт Microsoft Dynamics CRM;
  • В представлении Feature View дважды щелкните по Output Caching;
  • На панели Action, нажмите Edit Feature settings, удостоверьтесь, что и кэш и кэш ядра включены и нажимите OK;Теперь нужно добавить правила кэширования для сайта, которые мы запустим на Корневом уровне.
  • Все еще в корне веб-сайта в разделе Output Caching, нажмите Add и задайте такие параметры:
    • File Name Extension: bmp
    • Поставьте галку: Kernel Mode Caching
    • File Cache Monitoring: Using file change notifications
    • Нажмите OK и добавьте такие же правила кэширования для расширений css, gif, htc, js и png файлов.
  • Добавьте еще одно немного отличающиеся правило для css.aspx страниц. Нажмите ADD и установите:
    • File Name Extension: css.aspx
    • Поставьте галку: User-Mode Caching
    • File Cache Monitoring: Using file change notifications
    • Нажмите кнопку Advanced, и поставьте галку Query String Variable(s) и введите: lcid
  • Далее Вы можете добавить другие правила для других внутренних папок веб-сайта. Для этого Вы должны выбрать папку, дважды щелкнуть по Output Caching и добавить какое-либо правило. Например, такие:
    • Папка: _forms
    • File Name Extension: js.aspx
    • Поставьте галку User-Mode Caching
    • File Cache Monitoring: Using file change notifications
    • Кнопка Advanced, галка Query String: etc,FormType,FormName

    • Папка: _root
    • File Name Extension: aspx
    • Поставьте галку User-Mode Caching
    • File Cache Monitoring: Using file change notifications
    • Кнопка Advanced, галка Query String: aspx group,area,subarea,etc,supresslink

    • Папка: Tools
    • File Name Extension: aspx
    • Поставьте галку Kernel Mode Caching
    • File Cache Monitoring: Using file change notifications
    • Если у Вас возникнет какая-нибудь проблема с этим, удалите правила и/или отключите Output Caching.




Отключение логов IIS

Ведение логов IIS занимает ресурсы процессора, дисков и памяти, что не очень позитивно сказвыается на производительности. Поэтому их включение целесообразно только для отладки приложений или устранения каких-либо проблем. Чтобы отключить ведение логов сделайте следующее:
В IIS Manager выделите сайте CRM – в представлении Feature View дважды щелкните кнопкой по Logging – щелкните по Disable, чтобы отключить логи для сайта.


HTTP Compression

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

  • Щедкните правой кнопкой мыши по руту в IIS Manager’е — Properties — вкладка Service – далее Вы можете выбрать две опции:
    • Compress application files – включает сжатие динамических страниц, в которые по умолчанию входят asp, dll, и exe.
    • Compress static files – включает сжатие htm, html, и txt файлов (по умолчанию);

В IIS Manager выделите сайте CRM – в представлении Feature View дважды щелкните кнопкой по Compression – отметьте галками Enable dynamic content compression и/или Enable static content compression для включения динамического (по умолчанию входят файлы asp, dll и exe) и/или статического (по умолчанию входят файлы htm, html и txt) контента сайта.

Вы можете изменить список типов файлов, включенных в сжатие, откройте на редактирование файл C:\Windows\System32\inetsrv\config\applicationHost.config. Найдите секцию httpCompression и добавьте/удалите типы файлов подлежащие сжатию.

Напрмер, чтобы включить сжатие файлов Word и Excel, добавьте такие строки в раздел <dynamicTypes>:

<add mimeType="application/msword" enabled="true" />
<add mimeType="application/vnd.ms-excel" enabled="true" />

Чтобы изменения вступили в силу, необходимо перезапустить IIS.


Web gardens (Web-сады)

В IIS 6.0 Был добавлен новый режим обработки запросов, называемый режимом изоляции рабочих процессов (англ. worker process isolation mode). В этом режиме все веб-приложения, обслуживаемые сервером, работают в разных процессах, что повышает стабильность и безопасность системы. Кроме того, для приёма запросов HTTP был создан новый драйвер http.sys, который работает в режиме ядра, что ускоряет обработку каждого запроса.

По умолчанию каждому пулу приложений (для обработки запросов) соответствует один рабочий процесс w3wp. Но в IIS 6.0 также появилась такая фишка как Web gardens. Благодаря ей, пул можно настроить так, чтобы ему (для обработки обслуживания запросов) соответствовал набор из N эквивалентных рабочих процессов, разделяющих нагрузку.

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

Чтобы задействовать Web garden для CRM: В IIS менеджере выделите узел Application Pools — выделите пул CRMAppPool — щелкните Advance Setting — установите в секции Process Model необходимое значение Maximum Worker Process.


TTL кэша IIS

IIS кэшируют любые запрошенные объекты. У каждого объекта в пределах кэша есть время «жизни» (TTL) – время, в течение которого объект должен находиться в кэше и из которого IIS его достанет и выдаст, в случаи запроса. Что в результате значительно ускоряет работу веб-сервера. По умолчанию, значение TTL установлено в 30 секунд. Т.е. если объект в кэше не использовался в течение прошлых 30 секунд, то он удаляется.

И тут у нас опять палка о двух концах: 30 секунд это много или мало? Если все страницы на Вашем сайте являются динамичными, то IIS действительно не извлечет большую выгоду из кэширования. Соответсвенно уменшив этот параметр Вы могли бы освободить память под другие нужды. С другой стороны, если у Вашего сервера много свободной памяти, и куча статичных страниц, то Вы можете улучшить эффективность работы, увеличив TTL.

Чтобы изменить этот параметр откройте реестр. Далее в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters добавьте новый DWORD-ключ с именем ObjectCacheTTL и значением от 0 до 4 294 967 295 (это в секундах, где 0 – полное отсутствие кэширования).


Трассировка и дебаггинг

Для повышения производительности также можно отключить трассировку и дебаггинг (если они у Вас включены), с помощью конфигурациооных файлов machine.config (расположен в папке .Net Framework’а под которым выполняется пул приложений, например: C:\Windows\Microsoft.NET\Framework\vXXXX\Config\machine.config) и/или Web.config (находится внутри папки сайта CRM):

<configuration>
	<system.Web>
		<trace enabled="false" pageOutput="false" />
		<compilation debug="false" />
	</system. Web>
</configuration>


Другие параметры

Документ Optimizing and Maintaining Microsoft Dynamics CRM 4.0 также рекомендует использовать такие параметры для наcтройки IIS:

Параметр Значение
maxWorkerThreads 100
maxIoThreads 100
maxconnection 12*n (где n это число процессоров)
minFreeThreads 88*n
minLocalRequestFreeThreads 76*n
minWorkerThreads 50

Настраиваются эти параметры в файле C:\WINDOWS\Microsoft.NET\Framework\vXXXX\CONFIG\machine.config

Примечание: Еесли у Вас есть hyperthreading, Вы должны использовать число логических центральных процессоров вместо физических. Т.е., если у Вас сервер с четырьмя процессорами, то значение N в формулах будет 8 вместо 4.

Пример настройки:

<system.net>
	<connectionManagement>
		<add address="*" maxconnection="12"/>
	</connectionManagement>
</system.net>
<system.web>
	<processModel maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" />
	<httpRuntime minFreeThreads="88" minLocalRequestFreeThreads="76"/>
	...
</system.web>


Комментарии (9)
  • Азат 16.11.2010

    В IIS7 Output Caching написано для css.aspx: «поставьте галку Query String Variable(s) и введите: lci», а на фото №7 введено lcid.
    Так где же правда?

  • Азат 16.11.2010

    Вопрос по разделу «Другие параметры»
    В папке C:\WINDOWS\Microsoft.NET\ есть Framework и Framework64

    Если система 64-разрядная, выбирать Framework или Framework64?

    Далее, допустим открыли Framework64. Там есть папки v2.0.50727, v3.0, v3.5, v4.0.30319.
    Причем Config\machine.config содержатся в двух из них: v2.0.50727, v4.0.30319.
    В каком именно менять параметры?

  • slivka_83 16.11.2010

    1. Правда в вине 🙂 а если по делу, то «lcid»;
    2. Думаю, что 64 и v2 🙂 64, потому что 64 🙂 а v2, потому что CRM 4.0 никак не может работать от 4-ым .Net’ом (точнее не может если Вы специально не переназначите пул приложений сайта CRM на него — но это уже будет лютый ансапорт) 🙂

  • Рагим 16.11.2010

    Добрый день!

    Поддерживает ли CRM 2011 несколько Worker Process?

    У нас в системе есть сайт с веб-сервисом, который использует сервис Organization.svc. После того как увеличили количество WP до 4, сайт стал нестабильно, если запускать скриптом в цикле несколько раз мой веб-сервис. Логирование показало, что сервис падает при получении данных из CRM посредством сервиса.

  • slivka_83 16.11.2010

    CRM 2011 не знаю, но в CRM 4.0 с этим вроде были проблемы: http://weblogs.asp.net/gayanperera/archive/2010/01/29/crmapppool-number-of-worker-processes-and-plugins.aspx

  • Рагим 16.11.2010

    МС ответил по этому вопросу:
    Webgarden is unsupported from CRM 2011 scenario.

  • Александр 16.11.2010

    CRM 4.0 установили на сервере Windows Server 2008 R2, IIS 7.0

    При запуске CRM в браузере появляется такая ошибка
    «Ошибка HTTP 500.0 — Internal Server Error»
    Сбой вызова LoadLibraryEx в фильтре ISAPI «C:\Program Files\Microsoft Dynamics CRM\Server\Bin\Defaultaddonfilter.dll»
    Может кто знает как решать такую проблему?

  • Александр 16.11.2010

    Данную ошибку решили но теперь появилась новая «Обнаружены значения параметров ASP.NET, которые неприменимы в интегрированном режиме управляемого конвейера»

  • slivka_83 16.11.2010

    Сейчас Вам может помочь только гугл, поскольку мало у кого есть CRM 4.0.

*

code