English version

DockerContainerCpuThrottled: что делать при алерте

Правило алерта

alert: DockerContainerCpuThrottled
expr: rate(container_cpu_cfs_throttled_periods_total{name!=""}[5m])
  / rate(container_cpu_cfs_periods_total{name!=""}[5m]) * 100 > 25
for: 15m
severity: warning

Сообщение алерта: CPU-троттлинг контейнера {{ $labels.name }} ({{ $labels.instance }})

Что значит

Контейнер упирается в заданный лимит CPU: более 25% периодов планировщика CFS были урезаны на протяжении 15 минут. Приложение замедляется, хотя на хосте CPU может быть свободен.

Частые причины

Слишком низкий --cpus / cpu_quota / deploy.resources.limits.cpus, рост нагрузки, многопоточное приложение, которому мало дробного лимита.

Диагностика

docker stats --no-stream <имя>
docker inspect <имя> --format 'CPUs={{.HostConfig.NanoCpus}} quota={{.HostConfig.CpuQuota}} period={{.HostConfig.CpuPeriod}}'
docker top <имя>

NanoCpus в миллиардных долях ядра (1000000000 — это одно ядро), 0 означает отсутствие лимита.

Как исправить

Повысить лимит CPU, либо оптимизировать приложение, либо добавить реплик. Если лимит нужен «для порядка», подумайте о снятии ограничения и использовании cpu_shares.

Когда можно заглушить

Для фоновых контейнеров, которым троттлинг не мешает (задачи с низким приоритетом).

Похожие алерты

Весь набор из 44 протестированных правил + Alertmanager → Telegram: 790 ₽
Открыть в Telegram · Бесплатный набор Monitoring Lite · Все алерты runbook