memory-management - docker-desktop 使用 12 GB RAM 运行一个具有 24 MB RAM 的容器?

标签 memory-management docker-desktop wsl-2

在我看来,它就像 WSL2 容器 docker-desktop正在使用 12 GB RAM 运行一个具有 24 MB RAM 的容器。是什么赋予了? (详情如下)。
此外,当我将 docker-desktop 中所有进程的所有驻留 RAM (VSZ) 相加时,总共只有 4687251 KB 或 4.4 GB,那么剩下的 7 GB RAM 去了哪里?
我尝试从任务栏重新启动 Docker Desktop,并尝试终止 docker-desktop WSL2 容器(带有 wsl.exec -t ),两者都没有区别。我重新启动了整个 Windows 机器,现在它使用了更合理的 2GB RAM。与我使用 595MB RAM 的 Ubuntu 20.04 WSL2 相比,这仍然是很多。
所以:为什么是docker-desktop使用 12GB RAM 来服务一个小容器?我可以在不重新启动整个机器的情况下解决这个问题吗?

# What is docker-desktop-data? It doesn't support any commands...
$ wsl.exe -d docker-desktop-data free -m

# docker-desktop is using approx 12 GB RAM
$ wsl.exe -d docker-desktop free -m

             total       used       free     shared    buffers     cached
Mem:         25510      12245      13264        399       1461       8191
-/+ buffers/cache:       2592      22917
Swap:         7168          2       7165

# but docker containers are only using 24 MB?
$ docker stats --no-stream

CONTAINER ID   NAME            CPU %     MEM USAGE / LIMIT     MEM %     NET I/O         BLOCK I/O   PIDS
2f29ebe21db3   gitlab-runner   0.04%     24.55MiB / 24.91GiB   0.10%     7.49MB / 18MB   0B / 0B     30

# Sort by and sum up the VSZ values from ps in the dockerdesktop container
$ wsl.exe -d docker-desktop ps -o pid,user,vsz,rss,comm,args | perl -ane '$mem = $F[2]; $mem = $1 * 1024 if $mem =~ /(.*)m$/; printf "%9s $_", $mem; $totmem += $mem ; END { printf "Totmem: %10d\n", $totmem }' | sort | tail -n 10

   113664   259 root     111m  14m containerd-shim  /usr/bin/containerd-shim-runc-v2 -namespace services.linuxkit -id docker -address /run/containerd/containerd.sock
   113664   418 root     111m  13m containerd-shim  /usr/bin/containerd-shim-runc-v2 -namespace services.linuxkit -id socks -address /run/containerd/containerd.sock
   113664   493 root     111m  13m containerd-shim  /usr/bin/containerd-shim-runc-v2 -namespace services.linuxkit -id vpnkit-forwarder -address /run/containerd/containerd.sock
   145408  1119 root     142m  36m gitlab-runner    gitlab-runner run --user=gitlab-runner --working-directory=/home/gitlab-runner
   150528   176 root     147m  41m containerd       /usr/bin/containerd
   712704    26 root     696m  20m vpnkit-bridge    /usr/bin/vpnkit-bridge --pid-file=/run/vpnkit-bridge.pid --addr=stdio guest
   723968    16 root     707m  25m wsl-bootstrap    wsl-bootstrap run --base-image /mnt/host/c/Program Files/Docker/Docker/resources/wsl/docker-for-wsl.iso --version-pack /mnt/host/c/Program Files/Docker/Docker/resources/docker.tar --cli-iso /mnt/host/c/Program Files/Docker/Docker/resources/wsl/docker-wsl-cli.iso
   729088   234 root     712m  30m diagnosticsd     /usr/local/bin/diagnosticsd
   730112   316 root     713m  31m lifecycle-serve  /usr/bin/lifecycle-server
Totmem:    4687251

最佳答案

查看此处记录的 WSL2 配置文件:
https://docs.microsoft.com/en-us/windows/wsl/wsl-config#configure-global-options-with-wslconfig
您可以通过创建 %userprofile%\.wslconfig 将 WSL 引擎的使用限制为 3GB 和 2vCPU。文件如下:

[wsl2]
memory=3GB
processors=2
据我了解,内存在所有 WSL 命名空间/发行版之间共享,您看到的免费输入是其他发行版中的文件缓存主要占用的内存。
为了快速而肮脏地释放你的 RAM,你以 root 身份执行 sync; echo 3 > /proc/sys/vm/drop_caches在您的任何 WSL2 发行版中。
根据 docker-desktop-data HERE您可以检查答案,只是它是您容器的后备存储

关于memory-management - docker-desktop 使用 12 GB RAM 运行一个具有 24 MB RAM 的容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66172375/

相关文章:

java - 我应该在我的 java 持久性项目中调用 System.gc() 吗?

c - 无法从函数中释放内存

Python "module not found"或 "relative path with no parent"或 "no module named <app>"不一致的错误

c++ - 为什么 free(p) 不将 p 设置为 NULL?

c - 内存分配优化 : from heap to stack

docker - 错误 : "docker context create" requires exactly 1 argument

适用于 Windows 的 Docker : Accessing named volume mounts

Docker 桌面 - kubernetes 无法启动

python - WLS2 UBUNTU : npm ERR! gyp 错误!堆栈错误 : Can't find Python executable "python", 您可以设置 PYTHON 环境变量。和更多

c - addr2line - 在基本示例上失败