|
10.09.2018, 17:02 | #1 |
Участник
|
AX 2012 - глюки ядра
Добрый день,
Может кто сталкивался с такой проблемой и знает как ее решить (особо не рассчитываю, просто накипело). Все видно в принципе на трассировке. Невменяемые затраты времени на простейшие методы без вызовов БД: Конкретно этот пример AX 2012 R2, ядро 6.2.3000.5063. Код в CIL в пакете. В тот же момент проходил пересчет склада в 32 потока. Различные артефакты подобного рода наблюдаю и в других ситуациях, CIL, не CIL, иногда бывают тормоза на методах, которые вызывают strfmt() и больше вообще ничего. Перезагрузка аоса обычно лечит все такие ситуации, в CIL иногда становится лучше и без перезагрузки. |
|
10.09.2018, 17:35 | #2 |
Участник
|
Исчерпывающего ответа у меня нет, но есть наводящие мысли.
1. Вот тут описан глюк трейспарсера когда он неправильно отображал время и указан способ как узнать правильное время между событиями. Тормозит создание буфера. 2. Если код исполняется в CIL то при вызове функций ядра у нас получается передача управления между управляемым кодом и неуправляемым кодом и на этом идет потеря производительности. Подробнее тут: https://blogs.msdn.microsoft.com/mfp...-to-the-metal/ Не уверен, что в вашем случае это было причиной, но про это надо не забывать. 3. В некоторых специфических случаях (при массовой обработке строк) CIL может работать медленнее чем p-code см: Помогите найти: Сравнение производительности различных операндов при конкатенации строк У вас как раз идет работа со строкой. |
|
10.09.2018, 17:40 | #3 |
Участник
|
В вашем случае вместо QueryValue(parameter) для енума можно попробовать написать просто int2str(parameter)
Результат по идее будет тот же, но надеюсь, что побыстрее сработает. |
|
10.09.2018, 17:49 | #4 |
Участник
|
Цитата:
Такого рода глюки кстати наблюдал и ранее и не только на этом приложении, не только в этой компании. |
|
10.09.2018, 18:05 | #5 |
Участник
|
Получается что тормозит enum2value()
но метод состоит из нескольких вызов функций ядра. может посмотреть какая из них тупит ? Возможно аналогичный вызов и в других местах дает тормоза. |
|
10.09.2018, 19:49 | #6 |
Боец
|
какая-то кустарщина в enum2value написана, никогда туда не заглядывал. Вдобавок, медленный reflection. Я бы подкэшировал (globalCache) и отпустил с миром.
|
|
10.09.2018, 19:57 | #7 |
Боец
|
ещё одна мысль: strfmt('%1', E) очевидно обращается к Labels, которые можно попробовать переиндексировать (снести *.ali, *.alc).
|
|
11.09.2018, 12:07 | #8 |
Участник
|
Наблюдал такое на нескольких инсталляциях.
Основные два вопроса: обслуживаете ли вы БД модели и что у вас в целом с производительностью АОС серверов. Также часто проблема в сети - какая скорость сети между АОС и СУБД? Какая задержка? Точно ли это один физический свич или нормально настроен виртуальный свич в системе виртуализации? СУБД случайно не на виртуальном сервере?
__________________
Ivanhoe as is.. |
|
12.09.2018, 12:02 | #9 |
Участник
|
БД модели обслуживается, дефрагментации почти нет, т.к. каждый понедельник после релиза все индексы в ней ребилдятся. Статистика собирается по ней фулсканом, т.к. база небольшая.
С производительностью аосов все в порядке, по крайней мере ресурсы показывают низкую загрузку (процессоры, память и т.д.) Между аосом и субд 10 гигабит, они вообще в одной виртуальной среде, там нормально настроен свитч в виртуальной среде. Пинги <1, перекачка файла показывает 90+ мегабайт в секунду. Субд на виртуальном, как и аосы и терминалы. Но судя по queryvalue тормозит именно аос, а не БД (хотя нельзя исключать каких-то фоновых вызовов к метаданным модели). Кроме queryValue заметил еще аномалии в работе табличного кэша - чтение и запись. И еще показывает тормоза после метода super() в inventTrans.insert, inventTrans.update. Все это проявляется не постоянно, а время от времени, обычно под нагрузкой. Пока поиски причины продолжаются. |
|
12.09.2018, 13:30 | #10 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: vmoskalenko (2). |
12.09.2018, 13:55 | #11 |
Участник
|
|
|
12.09.2018, 16:24 | #12 |
Участник
|
|
|
14.09.2018, 14:02 | #13 |
Участник
|
Цитата:
А в методе updateFinancialReceipt этот вызов проходит с условием if (movement.inventModelType().stdCostBased()) Поставил такое же условие в updateFinancialIssue. Помогло. Но у нас Аксапта заточена только физические проводки, финансовых нет. Поэтому точно не могу сказать - а не поломается ли что-то из-за этого условия. Ой может не в тему. У нас 2009.
__________________
Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат! Последний раз редактировалось БАХ43; 14.09.2018 в 14:05. |
|
12.09.2018, 12:27 | #14 |
Участник
|
Попробовать перейти на железный скуль не реально?
Поищу какая была скорость сети на виртуале и что получилось на физике. Судя по симптомам проблема именно в виртуализации. Кстати она какая?
__________________
Ivanhoe as is.. |
|
12.09.2018, 13:57 | #15 |
Участник
|
Перейти можно. Но пока не вижу проблемы именно в СУБД, чтобы переходить, но вообще этот вопрос обсуждается. Виртуализация VMWare.
|
|
12.09.2018, 15:55 | #16 |
Участник
|
Статистика по внедрениям ax 2012, о которых я знаю, говорит, что переход на физический скуль всегда даёт большой прирост общей производительности. Даже когда формально виртуальные сервера отдыхают по счётчикам.
Уже сколько то лет мы пишем обязательность физического сервера бд в спецификациях заказчикам.
__________________
Ivanhoe as is.. Последний раз редактировалось Ivanhoe; 12.09.2018 в 15:57. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
09.02.2022, 20:42 | #17 |
Участник
|
На одном клиенте были подобные симптомы, периодически падала производительность одной пакетной многопоточной операции (обработка входящих документов - создание и разноска заказов на продажу, обработка накладных, обработка перехода права собственности (ппс) и т.д. в многопоточном режиме), при этом на БД - ок, а АОС работает как черепашка.
Удалось обнаружить вот такую зависимость : Если операция работала относительно долго (например, больше пары часов, хотя обычное время работы в среднем 20-30 минут), то через определенный промежуток времени скорость обработки документов существенно падала в сравнении с тем, что было с начала процедуры. Снимали трассировку и там примерно такие же проблемы - queryValue, табличный кеш, с парсингом xml какие-то затыки возникали(был еще запрос в коробке, который тоже на длительных операциях проявляется, но он легко оптимизируется). При этом я смотрел потребление памяти службой АОСа - после запуска потребление памяти резко росло (в течении пары минут съедалось несколько гигабайт), но даже если ПО работала существенно дольше, например, 12 часов то как правило объем памяти не превышал 18-20 ГБ (точных цифр не вспомню, но мне кажется больше 20ки я не видел). В целом есть ли связь именно с объемом потребляемой памяти - типа условно, после XXX гб АОС начинает тупить, не знаю, не уверен, у меня скорее гипотеза в том, что когда порог неутилизированной памяти(т.е. та, которую можно было бы уже освободить) превышает определенный порог, то у АОСа начинаются проблемы. Пока пытался разобраться натыкался где-то на рекомендацию, на каждый ресурсоемкий поток выделять отдельное ядро, ну такое, не знаю, у нас уже ломалось на 24 потоках хотя на аосе 32 ядра. В целом вот еще интересная статья по теме памяти (думаю видели, но на всякий случай оставлю ссылку тут) - https://cloudblogs.microsoft.com/dyn...in-xppil-code/ Хоть к теме и не относится, я вот пока ни на одном проекте еще не видел, чтобы где в то кастомизациях query\queryrun finalize вызывался. На клиенте пока ничего не стали делать - при необходимости, просто в ребут ПО отправляют ) Правда, думаю это временно, когда будет достигнут предел пропускной способности придется таки заняться оптимизацией потребляемой памяти, хотя может быть и не в ближайшем будущем.
__________________
Sergey Nefedov |
|
|
За это сообщение автора поблагодарили: Vadik (1), Logger (5), Masel (8). |
09.02.2022, 22:05 | #18 |
Участник
|
Я эту проблему решил потом. Нужно отключить серверную сборку мусора. Тормозить она насколько я помню начинает, когда включается сборка при большом потреблении памяти. С клиентской сборкой она включается на малых величинах и проблемы не возникает.
|
|
|
За это сообщение автора поблагодарили: fed (3), Vadik (1), Logger (1), SRF (5). |
10.02.2022, 08:07 | #19 |
Участник
|
Да, отключение серверной сборки мусора рассматривается как один из возможных вариантов, удобно не надо в коде ничего менять, я даже немного поигрался с ним в прод окружении.
Первоначально проверял на железном АОСе, там была забавная ситуация, перекинули туда только эту ПО, поставили 64 потока, ну думаем сейчас будет космос, но не тут то было - в режиме сервера он за считанные минуты съел +30ГБ и стал работать очень медленно, как результат скорость обработки документов была ниже в 2-3 раза, чем на виртуальном Переключил в режим клиента, объем памяти не поднимался выше 10 ГБ, даже при работе несколько часов и скорость обработки стала в 2-3 раза быстрее, чем на виртуальном, при этом глюков с тормозами в queryValue и т.д. не наблюдалось. Включили на виртуальном, и обнаружился интересный артефакт - ПО, которые работали не под админом стали работать существенно медленнее (у клиента почти все ПО работают под админом, но есть парочка, которые работают под выделенными учетками), появились постоянные запросы к метаданным и правам (обычно такую картинку наблюдаешь при изменении прав, которая в некоторых случаях приводит к фризу АОСа, но там по крайней мере понятно, что является источником, типа права поменяли, кеш обновляется, можно через axutil обновить кеш и т.д.), здесь возможно как то кеш начал регулярно обновляться, возможно просто что-то другое совпало, но предметно уже не анализировали.
__________________
Sergey Nefedov |
|
10.02.2022, 11:05 | #20 |
Участник
|
Цитата:
На аосе? На клиенте? |
|
Теги |
garbage collector, gcserver, сборка мусора |
|
|