Перейти к содержанию

Ошибки типа OOM allocating и ZERO RANDOM FD#

Проблема:

При запуске сервисов в Docker на RHEL 8 или RHEL 9 могут возникать ошибки, связанные с выделением файловых дескрипторов, такие как "OOM allocating" и "ZERO RANDOM FD".

Причина:

Проблема связана с тем, как среда выполнения контейнеров обрабатывает лимиты на файловые дескрипторы (nofile). По умолчанию среда выполнения контейнеров может устанавливать LimitNOFILE в infinity, что может привести к тому, что сервис попытается выделить чрезмерное количество файловых дескрипторов, вызывая эти ошибки.

Обходное решение:

Чтобы устранить эту проблему, можно установить явные лимиты на файловые дескрипторы (ulimit) для контейнера.

Это можно сделать, добавив следующую конфигурацию в Docker Compose файл для соответствующего сервиса:

licenses:
    ...
    network_mode: host
    container_name: luna-licenses
    ulimits:
      nofile:
        soft: 200000
        hard: 200000
    environment:
    ...

Или запустив контейнер с соответствующими параметрами:

docker run --ulimit nofile=200000:200000

Это устанавливает разумный предел для количества файловых дескрипторов, которые могут быть открыты процессом, предотвращая ошибки выделения.

Примечание. Это обходное решение специфично для RHEL 8 и RHEL 9. Проблема не наблюдалась на других дистрибутивах.