Главная
» Как сделать
»
Увеличьте лимит памяти контейнера кода без догадок.
Увеличьте лимит памяти контейнера кода без догадок.
Чтобы увеличить объем памяти, выделяемой контейнеру Collabora Online CODE, увеличьте лимит Docker в конфигурации, которая его создает, затем пересоздайте контейнер и подтвердите фактический лимит с помощью команд docker inspectили docker stats. Увеличение параметра приложения не увеличивает лимит контейнеров Docker, и хост или виртуальная машина Docker Desktop должны иметь достаточно памяти для соблюдения более высокого лимита.
В качестве гипотетического примера используется следующее: Райли администрирует развертывание Docker Compose на одном хосте. Предположим, docker statsчто установлен лимит в 2 ГиБ, и использование ресурсов близко к этому пределу при одновременном открытии нескольких документов. Райли рассматривает возможность ограничения лимитом в 4 ГиБ. Эти цифры являются лишь примерами, а не рекомендациями по выбору размера хранилища Collabora, заявлениями о производительности или результатами тестирования; ваш лимит должен определяться исходя из наблюдаемой нагрузки и производительности хоста.
1. Убедитесь, что контейнер действительно достигает своей крышки.
Выполните следующие команды на хосте Docker, заменив collaboraна фактическое имя контейнера:
docker statsОтображает текущее использование и лимит контейнера. В выводе команды `inspect` отображается настроенный лимит памяти в байтах и информация о том, регистрирует ли Docker контейнер как "OOM-killed". Значение `inspect`, равное `--`, означает, что у 0Docker нет явного жесткого ограничения для этого контейнера; это не означает, что машина имеет неограниченный объем оперативной памяти. Высокое значение само по себе не является доказательством события нехватки памяти, поэтому сравните его с историей перезапусков, журналами и временем, когда пользователи наблюдали сбои.
Гипотетический диагностический пример: контейнер CODE приближается к заданному пределу в 2 ГиБ.
Перед увеличением лимита проверьте, сколько оперативной памяти осталось для операционной системы и других служб. Рекомендации Docker по использованию ресурсов советуют тестировать нагрузку приложения и запускать контейнеры на хостах с достаточными ресурсами. В Docker Desktop также проверьте раздел «Настройки > Ресурсы» : память, выделенная виртуальной машине Docker, является отдельным лимитом, разделяемым между ее контейнерами. Увеличение лимита CODE сверх этого выделения не приведет к увеличению объема физической памяти; см. настройки ресурсов Docker Desktop .
2. Измените лимит службы Compose.
Отредактируйте существующую службу CODE в файле Compose. Сохраните текущий тег образа, порты, окружение, тома, сети и политику перезапуска; добавьте или обновите только параметр памяти. Для гипотетического примера Райли с 4 ГиБ:
Пример использования Compose: установить ограничение на объем памяти на уровне сервиса, сохранив при этом развернутый тег образа CODE.
В этом примере используется официальный образ Docker CODE от Collabora ; сохраните тег, уже используемый вашим развертыванием. mem_limitЭто жесткое ограничение, а не резервирование: Docker может разрешить контейнеру использовать до этого объема, но этот параметр не резервирует столько оперативной памяти на хосте. В справочнике по сервису Docker Compose определено mem_limitи указано, что он должен соответствовать, deploy.resources.limits.memoryесли присутствуют оба параметра. Если ваше развертывание использует оркестратор или управляемый платформой файл Compose, используйте поддерживаемое поле ресурса этой платформы и поддерживайте согласованность значений ограничения на дублирование.
Если вы запустили CODE напрямую с помощью команды `compose` docker run, воссоздайте его из исходной команды с помощью `compose` --memory=4gи сохраните все его текущие параметры. Для быстрого изменения параметров существующего контейнера Linux во время выполнения Docker также поддерживает `compose` docker update --memory 4g <container_name>. Рассматривайте файл Compose или исходную команду запуска как источник достоверной информации, чтобы последующая замена не восстановила старые ограничения. См. справочник по обновлению контейнеров Docker .
3. Пересоздайте код, чтобы вступило в силу сохраненное ограничение.
В каталоге, содержащем активный файл Compose, проверьте объединенную конфигурацию, затем воссоздайте только службу CODE:
docker compose config
docker compose up -d --no-deps --force-recreate collabora
Используйте ключ службы из вашего файла вместо collabora. Перед применением проверьте сгенерированную конфигурацию на предмет нового ограничения. Повторное создание CODE кратковременно прерывает сеансы редактирования, зависящие от этого контейнера, поэтому запланируйте изменение на время, когда допустимо кратковременное прерывание работы службы. Не удаляйте тома и не запускайте docker compose down -v; эти операции не нужны для изменения ограничения памяти и могут удалить постоянные данные, принадлежащие другим службам.
Примените отредактированную конфигурацию Compose и создайте заново только службу CODE.
4. Проверьте новый конденсатор и протестируйте его работу под нагрузкой.
После возврата сервиса проверьте сам контейнер, а не только YAML-файл:
В качестве примера 4g, вывод команды inspect должен представлять примерно 4 ГиБ в байтах и docker statsпоказывать предел около 4 ГиБ. Изображение ниже использует пример вывода только для иллюстрации. Затем понаблюдайте за КОДОМ при открытии типов документов и приблизительного количества одновременных сессий, важных для вашего развертывания. Убедитесь, что контейнер продолжает работать, видимые пользователю ошибки прекращаются, а хост сохраняет память для других своих процессов.
Ожидаемый шаблон проверки для вымышленной конфигурации с 4 ГиБ; отображаемые значения являются примером выходных данных, а не результатом измеренных параметров развертывания.
Если проблема сохранится
Если новое ограничение установлено, но CODE по-прежнему перезапускается, проверьте docker inspectсостояние docker logsи события ядра хоста или Docker на наличие записи о нехватке памяти. Если контейнер остается работоспособным, но обработка документов по-прежнему запускает очистку, Docker может быть не активным узким местом. Собственная конфигурация Collabora имеет поведение управления памятью, которое отделено от ограничения cgroup Docker; шаблон конфигурацииcoolwsd проекта описывает его серверные элементы управления. Перед внесением изменений проверьте конфигурацию для установленной вами версии CODE.
Не следует решать проблему неопределенности, устанавливая для контейнера неограниченный объем памяти или отключая механизм завершения работы при нехватке памяти. Docker предупреждает, что неограниченный объем памяти в контейнере может привести к исчерпанию памяти хоста и повлиять на работу несвязанных служб. Если у хоста нет безопасного запаса памяти, реальным решением является увеличение мощности хоста или виртуальной машины Docker, снижение одновременной нагрузки или распределение задач, а не повышение лимита сверх доступной оперативной памяти.