Как определить причину превышения порогов хоста: [Threads] в функциях Azure - PullRequest
0 голосов
/ 09 июля 2019

Я использую функцию Azure в соответствии с планом потребления. Монитор работоспособности хоста отключает его каждую неделю или две из-за превышения пороговых значений потоков. Я прочитал большую часть того, что я могу найти по этому поводу (например, начиная с https://aka.ms/functions-thresholds), и понимаю, что делает монитор работоспособности. В большинстве статей, которые я прочитал, обсуждается порог соединений, а не потоки. Я не могу понять, как решить эту проблему глубже и определить, какая часть моего кода вызывает проблему с многопоточностью. Я не использую какой-либо явный код TPL. Я делаю много очень простых / стандартных асинхронных операций ожидания для API REST, использующий статический HttpClient и стандартные операции crud для CosmosDB, использующие статический DocumentClient. Я вызываю только два связанных с задачей метода: асинхронный и ожидающий. Я не использую никаких шаблонов повторов в этой функции. Application Insights не делает я не могу сказать, какие вызовы создают потоки, какие потоки все еще открыты или оставлены и т. д.

Любые предложения о том, как я могу решать проблемы глубже? Я открыл заявку в службу поддержки Microsoft и жду их помощи.

Заранее спасибо, Том

1 Ответ

0 голосов
/ 11 июля 2019

Я считаю, что есть пара вещей, которые нужно учитывать, например:

  • Количество функций в вашем приложении функций
  • Количество асинхронных операций (2 в вашем случае)
  • Количество параллельных выполнений в данный момент

Функции в масштабе плана потребления основаны на количестве запущенных событий (использует эвристику) ( doc ) вверхдо 200 экземпляров без ограничения числа одновременных выполнений в одном экземпляре.

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

Чтобы обойти проблему, вы можете

  • Разделить приложение функций на несколько приложений функций, если это возможно.
  • Использование долговременных функций , которые должны позволить вам масштабировать ваши длительные операции, если таковые имеются
...