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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.01.2020, 10:13   #21  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Дождитесь пока упадет AOS, в чем проблема? Даже очень вредные пользователи и крутые компании могут понять необходимость однократного падения во время работы.
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: vmoskalenko (4).
Старый 21.01.2020, 16:29   #22  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Попробую сразу в одном сообщении ответить на всё.

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

Пытаться перекидывать на другой АОС будет проблематично. У нас специфика, использование Workflow стандартного, и для него важно чтоб на машине где крутится АОС, была обеспечена вся необходимая инфраструктура. Выделять ещё один АОС - это означает проделывать ещё раз все действия для обеспечения работы Workflow, и поэтому у нас на такой шаг пойдут в последнюю очередь. Собственно, из-за этого даже пакетные обработки по WF крутятся на основном АОСе, по этой же причине что на пакетном сервере не хотят устанавливать WF. Иначе было бы здорово, как раз по одному переводить на пакетный АОС и наблюдать за изменениями в памяти, но никак.

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

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

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

P.S. SysHeapLog не помог каким-то ощутимым образом. Может у него где-то есть какие-то особенные возможности о которых я не знаю, но то что удалось вытащить с его помощью это общая информация с помощью которой всё равно непонятно где копать. Либо я плохо с ним разобрался
Старый 21.01.2020, 17:24   #23  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
У вас точно актуальная версия kernel? Если течет прям ядро, то тут сами ничего не решите.

А насчет дампа, мне три раза находили с помощью его утечки, не думаю, что мне так везло что падало именно на коварном коде
__________________
Ivanhoe as is..
Старый 29.01.2020, 15:33   #24  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Я тут похоже наврал со своими наблюдениями. Да, по чуть-чуть память отбирается, но основные утечки - это прямо скачки когда за 10-20 секунд улетает до 100 Мб
Стал всячески копать, и докопался вот до чего, это 99,9% момент ухода памяти - выполнение пакета обработки событий стандартного Workflow.
Всё на нем сходится. Даже при низкой активности пользователей, когда одновременно два-три человека сидят, и память никуда не уходит, но как только появляется подходящая для обработки запись в WorkflowMessageTable, то всё, можно делать ставки сколько мегабайт отожрется в момент очередного запуска пакета
Мешает на все сто процентов поверить в это только одно - сам пакет отрабатывает через каждую минуту +/-, из-за этого в голову периодически приходит мысль "а вдруг простое совпадение"
Но! Ни разу при мне память скачками не убегала вне периода выполнения пакета, и ещё точнее - этого ни разу не происходило при "холостом" выполнении пакета (т.е. когда ни одного события по факту нет). Да, бывало обратное - есть события, но память не расходуется. Ну, это наверно больше говорит о том что разные события вызывают разный код, и не факт что прямо на любом варианте обязаны быть утечки

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

Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
У вас точно актуальная версия kernel? Если течет прям ядро, то тут сами ничего не решите.

А насчет дампа, мне три раза находили с помощью его утечки, не думаю, что мне так везло что падало именно на коварном коде
Ну как оказалось я был невнимателен, и с ядром похоже всё хорошо.
Вариант с дампом думаю да, при вновь открывшихся обстоятельствах может прокатить, поскольку слетит скорее всего именно при очередной попытке сожрать очередные 100 Мб ) Ну пока попробую так покопать, вроде область поиска сильно сузилась. Но если уж совсем упремся то и к такому варианту прибегнем
Старый 29.01.2020, 15:36   #25  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Снизьте частоту обработки WF раз в десять минут - никто же не умрет некоторое время, тут тогда совпадения уж точно не будет.
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: FrolovAndy (1).
Старый 29.01.2020, 15:46   #26  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Да, попробуем, спасибо!
Надо уже точно убедиться что дело именно в этом и только в этом, чтоб сомнения энергию не забирали )
Старый 30.01.2020, 16:47   #27  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
А ваш workflow точно целиком стандартный?? Нет никаких переопределенных провайдеров, иерархий, подписчиков на события, в которых, в теории может быть дурной код ??

И ещё, раз в минуту - шось часто )) У нас на тестовом приложении раз в 2 минуты и всем хорошо.
Старый 04.02.2020, 13:06   #28  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Цитата:
Сообщение от user_ax Посмотреть сообщение
А ваш workflow точно целиком стандартный?? Нет никаких переопределенных провайдеров, иерархий, подписчиков на события, в которых, в теории может быть дурной код ??

И ещё, раз в минуту - шось часто )) У нас на тестовом приложении раз в 2 минуты и всем хорошо.
Стандартный, но подпиленный. Вполне может быть что в этих доработках дело. Мне правда пока больше видится что проблема уже именно в нашем коде, который вызывается в результате конкретных событий. Потому что не каждая обработка воркфлоу вызывает утечки.

Мне тоже пока кажется что часто, при желании уменьшим, но пока вроде как есть нормально. Я так понимаю это было чтоб минимизировать задержки пользователей по продвижению документов, поэтому лишнее ворчание вызывать не особо хочется )
Старый 11.02.2020, 17:20   #29  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Почти что разобрался. Дальше думаю уже дело техники
Действительно, отжирает (и не возвращает память) один из кодов ответственных за обработку воркфлоу
WorkflowDocumentField::substitutePlaceholderAsUser, который в режиме runas вызывает уже substitutePlaceholder, и там как раз всё и происходит.
Мап, циклы, и всё как полагается, так что найдем утечку теперь, никуда не денемся )
За это сообщение автора поблагодарили: Logger (3), gl00mie (5).
Старый 11.02.2020, 19:07   #30  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Накопал причину, но в итоге опять уперся, и теперь опять очень нужны ваши советы и мнения

Итак, память расходуется и не возвращается, когда в режиме runas выполняется какой-нибудь queryRun. Точнее, после того как выполняется queryRun.next() - в этот момент в течение нескольких секунд уходит примерно 20 мб. И вернуть их ну никак не получается.

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

Собственно Workflow тут и не причем как таковой, не в нем конкретно проблема, а в этой странной особенности Аксапты.

Так что жду снова ваших советов, кто каким опытом поделится, мне пока совершенно ничего на ум не приходит кроме как плюнуть на runas и тупо исполнять в обычном режиме, но это хотелось бы в последнюю очередь
Старый 11.02.2020, 19:43   #31  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
362 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
А у вас RLS используется ? Если это так, надо смотреть какой у вас билд, как минимум проблемы с памятью были до ru4.

Безопасность на уровне записей

Если rls есть и в указанном методе его отключить не критично, то можно отключить через св-во query.recordLevelSecurity(false).

Другое дело, что такая правка будет работать только в одном методе, похорошему обновить бы вам ядро, если такая возможность есть.
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: FrolovAndy (1).
Старый 12.02.2020, 11:29   #32  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Цитата:
Сообщение от SRF Посмотреть сообщение
А у вас RLS используется ? Если это так, надо смотреть какой у вас билд, как минимум проблемы с памятью были до ru4.

Безопасность на уровне записей

Если rls есть и в указанном методе его отключить не критично, то можно отключить через св-во query.recordLevelSecurity(false).

Другое дело, что такая правка будет работать только в одном методе, похорошему обновить бы вам ядро, если такая возможность есть.
Да, действительно это из-за RLS. Изменение свойства для query на false для rls сразу же изменило поведение, перестали расходоваться и память, и время
Причем у нас реально RLS очень навороченный, так что я не удивляюсь в этом случае такому расходу памяти

Можно конечно и поотключать rls во всех таких ситуациях где queryRun на runas выполняется, но это для нас как самый крайний вариант. Проблема-то не в том что память расходуется, а в том что именно не возвращается когда уже не нужна процессу. Причем в этом случае никакие средства сборки мусора получается не работают, поскольку на queryRun памятью управляет ядро а не программный код. Поэтому прежде всего вопрос, может есть какие-то средства, на уровне каких-то системных процедур, которые могут принудительно дать команду освободить память? Причем как я понимаю это возможно сделать пока runas ещё работает, поскольку как только он закончится все концы наверно теряются

И насчет билдов вопрос. Наверно самым правильным в нашем случае будет и правда обновиться, и ничего не химичить.
Но я этой темой почти не владею. Поэтому начнем с простого - подскажите а как этот билд ядра определяется? Я обращался в админам, они тоже мало что знают, сказали только что установлен ServicePack 1 RollUp 5, но это для клиента. А как для АОСа тут вообще никто не знает
Старый 12.02.2020, 11:50   #33  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Посмотрите версию в exe клиента и AOSа - в свойствах файла. И поищите на форуме актуальные списки ядер по версиям.
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: FrolovAndy (2).
Старый 12.02.2020, 11:53   #34  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Ядро в любом случае настойчиво рекомендуется обновить.

По RLS - если проблема в основном в WF из-за частоты запуска, то просто проверьте что ничего лишнего не будет и отключите как написали выше именно в WF / измените в принципе query.
__________________
Ivanhoe as is..
Старый 12.02.2020, 13:13   #35  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
И поищите на форуме актуальные списки ядер по версиям.
https://aka.ms/axbuild - и там же можно скачать последний билд для AX2009 от 2018 года.
__________________
С уважением,
Олег.
За это сообщение автора поблагодарили: FrolovAndy (2).
Старый 12.02.2020, 13:17   #36  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Посмотрите версию в exe клиента и AOSа - в свойствах файла. И поищите на форуме актуальные списки ядер по версиям.
Версию нашел, 5.0.1500.3191, из того что искал нашел только что она входит в хотфикс KB 2278963, но не смог понять к какому RU он всё таки относится, может кто навскидку сразу скажет? Этот хотфикс в основном для SharePoint 2010 как я понял

Что касается частоты запуска пакета по WF - от неё не зависит, так как если будем реже вызывать пакет то просто больше событий будет накапливаться за один раз. А уход памяти это всегда очередной вызов runas с queryRun, так что всё равно прямо пропорционально количеству событий WF
Убирать rls с queryRun - ну наверно ничего принципиально плохого не будет, в конце концов в данном контексте этот вызов используется для служебного алгоритма WF. Наверно всё будет очень банально - попробуем недельку дать WF поработать без RLS, и если ни с какими сложностями из-за этого не столкнемся то будет принято решение так и оставить )
Старый 12.02.2020, 13:19   #37  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Цитата:
Сообщение от oip Посмотреть сообщение
https://aka.ms/axbuild - и там же можно скачать последний билд для AX2009 от 2018 года.
Спасибо огромное!
И заодно, из указанного списка получается что для нашей версии соответствует RU5 таки
Старый 15.02.2020, 17:12   #38  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
интересная проблема substring старых JVM.
не знаю насколько это актуально в Аксапте, надо проверять.
https://youtu.be/SZFe3m1DV1A?t=1707

суть:
substring в старых JVM не создавал новую строку, а возвращал shared область памяти из исходной строки. Поэтому исходная строка не освобождала память пока не будет освобожден substring

"известно, что это приводит к утечкам памяти. часто пользователь загружает 50Мб xml, из него выкусывает одну xml-entity размером 20 байт, ее куда-нибудь к себе в коллекцию сторит. а потом удивляется откуда у него в хипе 50мб мусора"
__________________
полезное на axForum, github, vk, coub.
Старый 25.02.2020, 11:54   #39  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Попробовал так сделать, разными способами, наблюдения показывают что память всё равно освобождается после выхода из того кода где формировалась большая строка, даже если результат substr продолжает жить дальше
Вообще у меня такое впечатление, что реально начиная с какого-то момента в Аксапте починили все эти утечки памяти, как уж я ни крутил эксперименты с листами, мапами, перемешивая все это между клиентской и серверной частями и организовывая всякие штуки типа "один класс содержит другой класс который содержит лист классов которые содержат мапы с типом рекорд и т.д. и т.п. …" до бесконечности, как бы вся эта мешанина ни жрала память, но потом всё благополучно освобождается.
Похоже на уровне runas что-то там не докручено. И то, не знаю как это в старших версиях, под рукой их нет сейчас чтоб на них проверить. А так может в 2012 уже и runas с памятью корректно работает
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DAX "съедает" всю память при запуске AOT NataLee DAX: Администрирование 12 17.09.2012 11:23
SQL с базой Axapta занимает всю оперативную память alesander DAX: Администрирование 9 23.06.2010 12:45
А построение перекрестных ссылок опять сожрет всю память и завесит систему нафих Alex_K DAX: Администрирование 15 04.09.2009 22:00
Вопросы по OLAP в DAX2009 oleg_e DAX: Функционал 9 10.12.2008 02:02
Очистить память после разноски журнала ОС npokypatop DAX: Программирование 7 25.06.2008 17:03
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:12.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.