Что может привести к тому, что образ Docker с приложением Rocket будет использовать совсем другую память при работе на разных хостах Docker? - PullRequest
0 голосов
/ 12 октября 2018

У меня есть веб-приложение Rocket, упакованное в образ Docker.Приложение использует в 4 или 5 раз больше памяти при запуске и развертывании в нашей среде Kubernetes (на некоторых хостах Linux Docker), чем использование памяти в качестве контейнера на хосте Docker для ноутбуков Mac.

Что может вызвать эту разницу в памяти?

Локально (как контейнер, работающий в моей док-станции для ноутбука Mac):

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1 root      20   0  187944  18916  12308 S   0.0  0.9   0:00.12 backend
   25 root      20   0   41024   3116   2668 R   0.0  0.2   0:00.03 top

На хосте докера Linux (или на kubernetes):

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND     
    1 root      20   0  239244 108408  10840 S   0.0  0.3   0:00.67 backend     
   38 root      20   0   18144   3260   2820 S   0.0  0.0   0:00.00 bash        
   44 root      20   0   41032   3124   2660 R   0.0  0.0   0:00.00 top

Вы можете видеть, что RES значение процесса backend намного выше, чем при работе в Kubernetes

Я дважды проверил, что версии изображений точно такие же.

1 Ответ

0 голосов
/ 15 октября 2018

Приложение Rocket по умолчанию создаст несколько рабочих потоков на основе системных ресурсов, и у каждого рабочего будет некоторая перегрузка памяти.

В Kubernetes у нас есть большие узлы, которые имеют больше ядер, чем мой локальный ноутбук, в результате чегообъем памяти веб-приложения значительно увеличился.

Я попытался сократить общее количество работников моего приложения Rocket до половины, и использование памяти, по-видимому, также уменьшилось примерно вдвое.

Я не уверен, есть ли другие причины, которые могут вызвать разницу, но это может быть основной причиной.

...