Как решить проблему высокого Steal Time в Linux?

«Как решить проблему высокого Steal Time в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Высокий Steal Time (st в top/vmstat) в виртуальной машине означает, что гипервизор не может выделить ей запрошенное процессорное время из-за конкуренции с другими ВМ на том же физическом хосте.

Порядок диагностики и решения:

  1. Подтвердить проблему:

    vmstat 1 5
    # Ищем столбец 'st'. Значение >5-10% — повод для анализа.
    mpstat -P ALL 1
    # Показывает загрузку по ядрам, включая steal.
  2. Действия на уровне ВМ (если есть доступ к гипервизору):

    • Проверить нагрузку на физическом хосте. Возможно, хост перегружен.
    • Мигрировать ВМ на менее загруженный физический хост.
    • Настроить лимиты CPU для ВМ через механизмы гипервизора (например, в KVM через virsh edit задать cputune с квотами и shares).
    • Увеличить виртуальные CPU (vCPU) для ВМ, если нагрузка реальная, но делать это осторожно, избегая overcommit (когда сумма vCPU всех ВМ сильно превышает количество физических ядер).
  3. Действия внутри проблемной ВМ:

    • Оптимизировать нагрузку: выявить процессы, потребляющие много CPU (pidstat 1, perf top), и попытаться снизить их аппетиты.
    • Настроить приоритеты процессов (nice, chrt) для критичных задач.
    • Рассмотреть использование CPU affinity (taskset), чтобы "привязать" критичные процессы к конкретным vCPU, что может снизить contention.

Профилактика: Мониторинг Steal Time (например, через node_exporter в Prometheus) и настройка алертов при превышении порога.