Управление памятью контейнера и OOM в Cloud Run - PullRequest
2 голосов
/ 13 июля 2020

Нужна помощь в понимании того, как рассчитывается использование памяти при запуске контейнера.

скажем, у нас есть контейнер, основанный на Ubuntu 18.04, который мы запускаем внутри другой Ubuntu 18.04, а точнее той же ОС. со следующими параметрами -

docker run -it -p 8080:8080 --cpus 2 --memory 2048m

Теперь вопрос в том, что тот же процесс, когда мы запускаем на нашей локальной машине с контейнерами, он отлично работает без OOM ... однако в тот самый момент, когда мы ставим то же самое контейнер и процесс в облаке Google запускаются, контейнер выходит из памяти. Итак, вопрос здесь:

  1. Как рассчитывается использование памяти при запуске облака Google?
  2. Получим ли мы какое-либо преимущество, если запустим одну и ту же гостевую ОС на той же ОС хоста?

и есть ли способ решить эту проблему, изменив нашу систему на любую другую платформу при работе в облачном режиме?

Ответы [ 2 ]

1 голос
/ 14 июля 2020
  1. Как сказал @Dustin, если вы записываете / изменяете файлы на локальный диск в Cloud Run, это будет учитываться в вашей доступной памяти. Скорее всего, это проблема.

    Однако, если ваш код (или модули, которые вы импортируете, например, клиентские библиотеки Google Cloud) следует различным путям кода на вашем ноутбуке и развернутом приложении, это может быть причиной OOM. также.

  2. Контейнеры не запускают операционные системы. Образ вашего контейнера, основанный на образе ubuntu:18.10, не обеспечивает оптимизацию памяти (или не использует общий динамический c кеш библиотеки).

    Он просто заставляет ваше приложение использовать двоичные файлы и динамические c библиотек, доступных в этом базовом образе, и используйте диспетчер пакетов этого дистрибутива. Точно так же у вас нет контроля над хост-машиной Cloud Run запускает ваши контейнеры.

Также обратите внимание, что текущее ограничение памяти в Cloud Run составляет 2 ГБ, однако вскоре оно будет увеличено до некоторого вроде 4 ГБ.

1 голос
/ 14 июля 2020
• 1000 1001 *

From https://cloud.google.com/run/docs/tips/general#deleting_temporary_files:

В среде Cloud Run (полностью управляемой) дисковое хранилище является файловой системой в памяти. Файлы, записанные на диск, занимают память, доступную для вашей службы, и могут сохраняться между вызовами. Невозможность удаления этих файлов может в конечном итоге привести к ошибке нехватки памяти и последующему холодному запуску.

...