0

我有一个 Rocket Web 应用程序打包到一个 Docker 映像中。该应用程序在我们的 Kubernetes 环境(一些 Linux Docker 主机)中部署和运行时,启动时使用的内存比它作为 Mac 笔记本电脑 Docker 主机上的容器运行时的内存使用量多 4 或 5 倍。

什么可能导致这种内存差异?

本地(作为在我的 Mac 笔记本电脑 docker 中运行的容器):

 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 docker 主机上(或在 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 上高很多

我已经仔细检查了图像版本是否完全相同。

4

1 回答 1

0

Rocket 应用程序默认会根据系统资源创建多个工作线程,每个工作线程都会有一定的内存开销。

在 Kubernetes 上,我们有比我本地笔记本电脑更多的内核的大型节点,导致 Web 应用程序的内存增加了很多。

我试图将我的 Rocket 应用程序的工作人员总数减少到一半,内存使用量似乎也减少了一半左右。

我不确定是否还有其他可能导致差异的原因,但这可能是主要原因。

于 2018-10-15T14:03:41.030 回答