Почему увеличивается Steal Time в T-инстансах AWS?

«Почему увеличивается Steal Time в T-инстансах AWS?» — вопрос из категории Облачные платформы, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Steal Time в мониторинге (например, в top или CloudWatch) — это время, которое виртуальная машина (инстанс) готова была выполнять работу, но не могла получить физический CPU, потому что гипервизор отдал его другой VM на том же физическом хосте. Для T-инстансов AWS (t2, t3, t4g) это явление напрямую связано с моделью базовой производительности (CPU baseline) и CPU-кредитов.

Причины роста Steal Time в T-инстансах:

  1. Истощение CPU-кредитов: T-инстансы имеют базовый уровень CPU-производительности (например, 20% для t3.micro). Для работы выше этого уровня они тратят заработанные CPU-кредиты. Если нагрузка продолжительная и высокая, кредиты заканчиваются, и инстанс ограничивается своим baseline. Если в этот момент ему нужно больше CPU, он встаёт в очередь и фиксирует steal time.
  2. Конкуренция на физическом хосте («шумный сосед»): AWS размещает множество виртуальных машин на одном физическом сервере. Если другие инстансы на том же хосте активно используют CPU, вашему T-инстансу может не хватить даже его гарантированного baseline, что также приведёт к steal.

Диагностика и решения с позиции DevOps:

  • Мониторинг: Настроить алерты в CloudWatch на метрики CPUCreditBalance (остаток кредитов) и CPUSurplusCreditBalance (долг, в режиме unlimited).
    # Пример просмотра баланса кредитов через AWS CLI
    aws cloudwatch get-metric-statistics 
    --namespace AWS/EC2 
    --metric-name CPUCreditBalance 
    --dimensions Name=InstanceId,Value=i-0abc123def456 
    --start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%TZ) 
    --end-time $(date -u +%Y-%m-%dT%TZ) 
    --period 300 --statistics Average
  • Выбор инстанса: Если нагрузка стабильно высокая, перейти на инстансы семейства M (general purpose) или C (compute optimized), которые предоставляют постоянную (фиксированную) производительность CPU.
  • Настройка инстанса: Для всплесковых, но непостоянных нагрузок можно включить для T3 инстанса unlimited mode. Это позволит работать выше baseline даже при нулевом балансе кредитов, но за дополнительную плату за использованные сверхлимитные кредиты.
  • Вертикальное масштабирование: Увеличить размер инстанса (например, с t3.micro на t3.large), чтобы получить более высокий baseline и больший пул кредитов.