Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

RESOURCE_QUOTA_EXCEEDED Linux / DevOps

Ограничение ресурсов контейнеров: CPU Quota, Shares, Memory и I/O Throttling

Обновлено: 21.08.2026
  • Один контейнер утилизирует 100% всех ядер процессора (CPU Starvation) или всю память хоста.
  • Зависание операций дискового ввода-вывода из-за генерации интенсивного I/O одним сервисом.
  • Падение соседних системных демонов и сервисов на одном сервере.

1. Ограничение процессорных ресурсов (CPU)

# Выделение строго 1.5 ядер CPU (CFS Quota)
docker run -d --name app_cpu --cpus="1.5" my_image

# Привязка к конкретным ядрам CPU (Core Pinning)
docker run -d --name app_pinned --cpuset-cpus="0,1" my_image

# Установка относительного приоритета CPU (CPU Shares, дефолт 1024)
docker run -d --name app_low_pri --cpu-shares=512 my_image

2. Ограничение дискового ввода-вывода (Block I/O Throttling)

# Ограничение скорости записи на устройство /dev/sda до 10MB/s
docker run -d --name app_io \
  --device-write-bps /dev/sda:10mb \
  --device-read-bps /dev/sda:20mb \
  my_image

3. Комплексная конфигурация ресурсов в Docker Compose

services:
  backend:
    image: app:v1
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 4096M
        reservations:
          cpus: '0.5'
          memory: 1024M

4. Проверка ограничений в работающем контейнере

docker exec -it app_cpu cat /sys/fs/cgroup/cpu.max
💡 Практика специалистов: При установке жестких лимитов --cpus многопоточные приложения (Java, Go) могут испытывать эффект троттлинга CFS. Всегда контролируйте параметр nr_throttled в /sys/fs/cgroup/cpu.stat.

Частые вопросы (FAQ)

В чем разница между --cpus и --cpu-shares?

--cpus задает жесткий потолок утилизации CPU (через CFS Quota). --cpu-shares задает относительный вес процесса при дефиците ресурсов, но позволяет использовать 100% свободного CPU при отсутствии конкуренции.

Как cpus='1.5' транслируется на уровне ядра Linux?

Через параметры cpu.cfs_quota_us (150000) и cpu.cfs_period_us (100000). За период 100 мс контейнер может суммарно выполняться 150 мс на всех ядрах.

Полезные материалы
Рекомендуем