Создание экземпляра объекта DCOM иногда зависает при масштабировании роли Azure

В моем коде запуска роли Azure я создаю экземпляр объекта DCOM, чтобы убедиться, что он может быть создан, а затем немедленно освобождаю его, так как в данный момент он мне действительно не нужен.

Я делаю это в отдельной теме, которая на самом деле news соответствующий класс C# RCW и основной поток Thread.Join()с этим потоком с тайм-аутом 30 секунд. Если поток все еще работает после Thread.Join() возвращает это означает, что создание объекта DCOM занимает подозрительно много времени, и поэтому Thread.Abort() называется и роль перезапускается. 30 секунд должно хватить - объект легок и не требует от времени создания экземпляра.

Этот код работал нормально, пока я не попытался значительно увеличить свой сервис. Я попросил поддержки поднять квоту на вычислительные ядра и попытался масштабировать до 100 (ста) экземпляров.

Теперь большинство экземпляров началось нормально, но некоторые из них столкнулись именно с ситуацией, описанной выше - создание объекта DCOM заняло слишком много времени, и поэтому в коде возникло исключение, которое вызвало перезапуск роли.

Я повторил тест несколько раз. Как только я прошу увеличить масштаб до нескольких десятков случаев, проблема воспроизводится в некоторых недавно запущенных экземплярах. Поскольку все экземпляры одинаковы, я понятия не имею, что может быть причиной такого поведения.

В чем может быть причина того, что объект DCOM занимает так много времени только в некоторых случаях?

1 ответ

Мои исследования показывают, что когда я масштабируюсь на большое количество экземпляров, некоторые экземпляры будут довольно неповоротливыми в момент начала, особенно в отношении операций, связанных с IO. Я предполагаю, что это потому, что хост (8-ядерный аппаратный сервер), на котором работает виртуальная машина, делает что-то тяжелое, и поэтому существует серьезная конкуренция за ввод-вывод. В этих условиях создание объекта DCOM, который обычно занимает около 1 секунды, может занять до 40 секунд, и мой тайм-аут должен быть просто увеличен.

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