AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Администрирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.01.2013, 14:58   #1  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Выделение памяти под процессы на сервере MS CRM
Печальная история
Некоторое время назад заметил, что с определенной периодичностью начал "отваливаться" один из workflow-процессов с описанием ошибки "Недопустимый тип получателя". Ошибка возникает на шаге, который вызывает создание новой кастомной сущности, на которой работает очень хитрый и развесистый PreCreate-плагин. Стал думать и гадать, разбираться так и сяк - в ручном режиме ошибка не отлавливается: всё работает с первого раза. Но суть не в самой ошибке, а в попытках обнаружения её источника. В процессе наблюдения и разбора обнаружилось, что на сервере CRM (single server) происходит нехилое выделение памяти под процессы:

- Microsoft CRM Asynchronous Processing Service (один из двух), и
- Microsoft.Crm.Sandbox.HostService

Отмечу, что в общих масштабах сервера в принципе, выделяемая память не занимает какое-то критичное пространство - около 20% всего, да и Microsoft.Crm.Sandbox.HostService периодически "ужимается" до исходного состояния. Но вот Asynchronous Processing Service реально беспокоит - за три цикла выполнения указанного workflow (трижды подряд он срабатывает), выделямая память возросла с 300 460 К до 544 924 К.
Подозреваю, что код плагина должен содержать какие-нить Dispose или что-то вроде. Но что делать конкретно, непонятно, поэтому, если кто знает ответы на вопросы (смотрим ниже) или даже знает источник, из которого можно прочесть что-то,- буду благодарен за помощь.
Вопросы:
1. Что влияет на выделение памяти под указанные процессы?
2. Как правильно организовать программные ресурсы плагина для того, чтобы избежать утечек?
3. Хотелось бы понимать: за что отвечает процесс Microsoft.Crm.Sandbox.HostService и какие выводы можно сделать, если под данный процесс выделяется память?
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!

Последний раз редактировалось Likefire; 17.01.2013 в 15:11.
Старый 18.01.2013, 14:13   #2  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Асинхронный сервер прожорлив и глуп по своей природе, бороться с ним опасно и бесполезно.

Хост процесс сендбокса, предположительно, обслуживает воронку событий системы, на которую подписаны изолированные плагины. Интересный момент заключается в том, что даже если плагин асинхронный, он выполняется в процессе sandbox! Честно говоря, я не особо силен во всей этой низкоуровневой процессной теме, но дебагером такой плагин ловится как при подключении как к асинхронному сервису, так и к сервису песочницы. Опять же чисто теоретически, возможно в этом и состоит природа "распухания" памяти под два этих процесса.

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

Так же рекомендую обратить внимание на то, что плагины песочницы конструируются и выполняются каждый раз при запуске плагина. Иными словами, они не могут что-либо кешировать. Если вы выполняете в них какие-то оптимизации по примеру CRM 4.0, вы только еще сильнее убиваете производительность. По поводу кеширования рекомендую следующий ресурс: http://www.avanadeblog.com/xrm/2011/...a-caching.html. Так же, последние версии SDK предлагают вам класс CachedOrganizationService который может помочь вам что-то сэкономить.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
За это сообщение автора поблагодарили: Likefire (1).
Старый 28.02.2013, 15:12   #3  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Собственно, удалось немного урегулировать проблему. Вернее: две проблемы. И выделение памяти удалось отрегулировать и выяснить почему плагин падает.

С выделением памяти всё просто: по концовке плагина, когда все необходимые манипуляции исполнены и собственно, остается только сделать выход - я принудительно выполняю "обнуление" всех объявленных тяжелых переменных (списки, массивы, XML-документ). Но не просто присваиваю null, а вызываю сначала Clear() и подобные ему методы, а потом только присваиваю null (для надежности). С памятью всё стало намного лучше (Garbage Collector похоже не доходит до областей кода в плагинах).
Также, сам код плагина доработал, чтобы он не оставлял без внимания возможные исключения и информировал о том, что за исключение вынудило его упасть. Оказалось, что падает не сам плагин. Плагин срабатывает на создании сущности, а сущность создает задание рабочего процесса, который числится как дочерний, и при более чем 6-ти повторах ругается на то, что типа бесконечный цикл и всё такое. Пришлось лезть в базу и изменять параметры, как об этом говорится в следующем блоге: http://social.microsoft.com/Forums/e...e-716c8771ee78 Но я изменил не количество повторов, а MessageProcessorMinimumInactiveSeconds, поскольку воркфлоу повторяется раз в полчаса, а в настройках этот параметр равен 3600 секундам, то есть одному часу.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
За это сообщение автора поблагодарили: Bondonello (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 10 Blog bot Dynamics CRM: Blogs 0 17.08.2012 03:27
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 7 Blog bot Dynamics CRM: Blogs 0 27.03.2012 02:11
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 4 Blog bot Dynamics CRM: Blogs 0 24.09.2011 01:16
Все о Microsoft Dynamics CRM: Как установить Microsoft Dynamics CRM 2011 Beta Blog bot Dynamics CRM: Blogs 0 31.10.2010 15:08
CRM DE LA CREME! Configuring Microsoft Dynamics CRM 4.0 for Internet-facing deployment Blog bot Dynamics CRM: Blogs 0 18.08.2009 11:05
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:03.