docker-desktop使用12 GB RAM运行一个容器与24 MB RAM?



在我看来,WSL2容器docker-desktop使用12 GB RAM运行一个具有24 MB RAM的容器。到底发生了什么事?(详情如下).

此外,当我将docker-desktop中所有进程的所有驻留RAM (VSZ)加起来时,总数仅为4687251 KB或4.4 GB,那么剩余的7 GB RAM去了哪里?

我尝试从任务栏重新启动Docker Desktop,我尝试终止docker-desktopWSL2容器(与wsl.exec -t),两者都没有区别。我重新启动了整个Windows机器,现在它使用了一个合理得多的2GB内存。与我使用595MB内存的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: %10dn", $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://learn.microsoft.com/en-us/windows/wsl/wsl-config#configure-global-options-with-wslconfig
您可以通过创建%userprofile%.wslconfig文件来限制WSL引擎的使用,例如3GB和2vCPU,如下所示:

[wsl2]
memory=3GB
processors=2

据我所知,内存在所有WSL名称空间/发行版之间共享,您看到的是输入free的内存主要被其他发行版中的文件缓存占用。为了快速而肮脏地释放内存,您可以在任何WSL2发行版中以根sync; echo 3 > /proc/sys/vm/drop_caches的身份执行。
根据docker-desktop-data这里你可以检查答案,简单地说,它是你的容器的后备存储

相关内容

最新更新