Управление доступными ресурсами в облачной среде по запросу – тема, которая бывает очень непростой. Но эта работа стоит того, поскольку вы сможете использовать ресурсы гораздо эффективнее. Поэтому многие компании и проекты решаются мигрировать на облачные платформы, в частности, на Azul, AWS, Google Cloud или другие. С точки зрения программиста, есть одна истина, которая сохраняется и в облаке: рекомендуется понимать поведение и ограничения того JVM-приложения, что вы развернули (или не приложений, а подов, минимальных развертываемых единиц в Kubernetes). Платформа Java является многопоточной, и, даже если вы не собираетесь использовать какие-либо доступные для этого API, платформа все равно порождает множество потоков-демонов, работающих в фоновом режиме. Такие потоки нужны не только для очистки и подхватывания неиспользуемой памяти. Они относятся к платформе, а что насчет фреймворков? Фреймворки Java пытаются обслуживать большие эксплуатационные мощности; следовательно, инициируется работа множества вспомогательных потоков. Ниже мы немного заглянем под капот. В этой статье будет подробнее рассмотрено, как устроены популярные фреймворки Quarkus и Spring-Boot, сколько потоков они инициируют, чтобы обслужить все результаты. Давайте вместе пробежимся по примерам и для начала разберемся, какова разница между мониторингом и профилированием.