Задержка BizTalk увеличивается после 1 минуты первоначального вызова

Я запускаю оркестровку в BizTalk server 2016 с двухсторонним портом получения WCF (IIS) и портом отправки адаптера SAP, чтобы выполнить простой запрос в SAP. Я пытаюсь оптимизировать производительность.

Мой вопрос: когда я вызываю свою оркестровку в первый раз (после перезапуска экземпляра Host), первый вызов занимает около 1 секунды, что, как я понимаю, происходит из-за загрузки сборок в память. Последующие вызовы намного быстрее и занимают около 200-300 мс. Но ровно через 1 минуту после первого звонка следующий звонок снова занимает 1 секунду. Шаблон является:

1st call 1 s
new call 300 ms
new call 300 ms
...
new call 1 s (1 minute after the first call)
new call 300 ms
new call 300 ms
...

Как будто что-то очищается из памяти через 1 минуту, но я не могу понять, почему? Я настроил файл конфигурации так, что сборки никогда не выгружаются из памяти, и у меня есть пул сообщений и оркестровок до 50 мс.

Есть ли какая-либо другая конфигурация, которую мне нужно изменить?

2 ответа

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

OrDostration AppDomain время от времени разрушается, если он не активен.

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

В этом разделе пользователь может указать конфигурацию по умолчанию для любого созданного домена приложения, с которым не связана именованная конфигурация (см. AppDomainSpecs ниже)

SecondsEmptyBeforeShutdown - это количество секунд, в течение которых домен приложения пуст (то есть не содержит никаких оркестровок) перед выгрузкой. Укажите -1, чтобы указать, что домен приложения никогда не должен выгружаться, даже если он пуст.

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

<DefaultSpec SecondsIdleBeforeShutdown="1200" SecondsEmptyBeforeShutdown="1800">

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

Другие вопросы по тегам