Ответ
Высокий Steal Time (st в top/vmstat) в виртуальной машине означает, что гипервизор не может выделить ей запрошенное процессорное время из-за конкуренции с другими ВМ на том же физическом хосте.
Порядок диагностики и решения:
-
Подтвердить проблему:
vmstat 1 5 # Ищем столбец 'st'. Значение >5-10% — повод для анализа. mpstat -P ALL 1 # Показывает загрузку по ядрам, включая steal. -
Действия на уровне ВМ (если есть доступ к гипервизору):
- Проверить нагрузку на физическом хосте. Возможно, хост перегружен.
- Мигрировать ВМ на менее загруженный физический хост.
- Настроить лимиты CPU для ВМ через механизмы гипервизора (например, в KVM через
virsh editзадатьcputuneс квотами и shares). - Увеличить виртуальные CPU (vCPU) для ВМ, если нагрузка реальная, но делать это осторожно, избегая overcommit (когда сумма vCPU всех ВМ сильно превышает количество физических ядер).
-
Действия внутри проблемной ВМ:
- Оптимизировать нагрузку: выявить процессы, потребляющие много CPU (
pidstat 1,perf top), и попытаться снизить их аппетиты. - Настроить приоритеты процессов (
nice,chrt) для критичных задач. - Рассмотреть использование CPU affinity (
taskset), чтобы "привязать" критичные процессы к конкретным vCPU, что может снизить contention.
- Оптимизировать нагрузку: выявить процессы, потребляющие много CPU (
Профилактика: Мониторинг Steal Time (например, через node_exporter в Prometheus) и настройка алертов при превышении порога.