AITM предоставляет представление мониторинга ресурсов в реальном времени, чтобы в любой момент видеть, что именно выполняется, ожидает и потребляет ресурсы — это полезно для выяснения, почему Task застряла в ожидании, или для обнаружения нехватки ресурсов до сбоя.
Resource Monitor
Лимиты, с которыми работает монитор, задаются в Settings → Watchdog & Resources (срок хранения Disk Janitor, бюджеты в ГБ для Disk Watchdog, резервирование CPU/RAM для тестов); количество одновременно выполняющихся Task задаётся в Settings → Pipeline → Max concurrently running tasks. Описанные ниже слоты пулов — это внутренние слоты ресурсов, а не слоты проектов лицензии.
Вкладка "Queued"
В панели монитора есть вкладка "Queued", в которой перечислены Task, ожидающие запуска, прежде чем они будут взяты на выполнение.
Снимок выполнения и сегмент "Pools" в строке состояния
Сегмент "Pools" в строке состояния выводит живой снимок выполнения: для каждой выполняющейся или ожидающей Task он показывает waitKind (на какой вид ресурса она ожидает) и waitedMs (как долго она ждёт), а также какие держатели пулов в данный момент занимают слот, и индикаторы допуска/нагрузки, чтобы можно было увидеть конкуренцию за пул ещё до того, как Task начнут выстраиваться в очередь.
Панель Threads — определение размера пула по измеренному RSS
Обобщённая панель Threads показывает для каждого пула ресурсов отдельных держателей с их PID и измеренным RSS (резидентная память), поэтому ёмкость пула определяется по реально измеренному использованию памяти, а не по статической оценке.
Метрики tmpfs
Интерфейс Resource Monitor также показывает метрики использования tmpfs (файловой системы в памяти), чтобы можно было видеть нагрузку на диск в памяти наряду с нагрузкой на процессы/пулы.
Глобальный пул слотов запуска тестов
Панель Threads также показывает глобальный пул слотов запуска тестов, то есть сколько слотов выполнения тестов занято во всём проекте, чтобы можно было понять, ожидает ли шаг Test какой-либо Task потому, что все слоты запуска тестов заняты.
Советы
- Прежде чем считать Task зависшей, проверьте waitKind в сегменте Pools — она может просто ожидать занятый пул.
- Используйте RSS по каждому держателю на панели Threads, чтобы заметить вышедший из-под контроля процесс до того, как он вызовет OOM.
- Если вкладка Queued продолжает расти, проверьте индикаторы нагрузки пулов, чтобы найти узкое место.