Выбор ответа Senior Производительность и профилирование обновлено
CPU throttling в контейнере
Вопрос
Под с limits.cpu: 1 показывает среднюю загрузку 40% одного ядра, но p99 задержки скачет до 300 мс. Какая вероятная причина?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Троттлинг CFS: квота периода выбирается, и процесс замирает. Лимит CPU в Kubernetes реализован квотой CFS на период (по умолчанию 100 мс).
Варианты ответа
- Kubernetes не даёт поду больше 40% ядра без явного requests
- Слишком маленький requests памяти, и под уходит в своп
- Троттлинг CFS: квота периода выбирается, и процесс замираетправильный ответ
- Средняя загрузка 40% исключает проблемы с CPU, искать надо в сети
Разбор
Лимит CPU в Kubernetes реализован квотой CFS на период (по умолчанию 100 мс). Многопоточное приложение может съесть квоту за первые 30 мс периода и простоять остальные 70: средняя загрузка низкая, а запросы застревают. Видно по container_cpu_cfs_throttled_periods_total. Лечится увеличением лимита, отказом от CPU-лимита для критичных сервисов или настройкой числа потоков рантайма (GOMAXPROCS и аналоги).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.