docker-desktop 正在使用 12 GB RAM 到 运行 一个 24 MB RAM 的容器?
docker-desktop is using 12 GB RAM to run one container with 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 桌面,并尝试终止 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 = * 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 namespaces/distros 之间共享,您看到输入 free 时内存主要由其他发行版中的文件缓存占用。
要以一种肮脏的方式快速释放您的 RAM,您可以在任何 WSL2 发行版中以 root sync; echo 3 > /proc/sys/vm/drop_caches
身份执行。
根据 docker-desktop-data 你可以检查答案,只是它是你容器的后备存储
在我看来,WSL2 容器 docker-desktop
使用 12 GB RAM 而 运行 一个容器使用 24 MB RAM。是什么赋予了? (详情如下)。
此外,当我将 docker-desktop
中所有进程的所有驻留 RAM (VSZ) 加起来时,总数只有 4687251 KB 或 4.4 GB,那么剩余的 7 GB RAM 去哪儿了?
我尝试从任务栏重新启动 Docker 桌面,并尝试终止 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 = * 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 namespaces/distros 之间共享,您看到输入 free 时内存主要由其他发行版中的文件缓存占用。
要以一种肮脏的方式快速释放您的 RAM,您可以在任何 WSL2 发行版中以 root sync; echo 3 > /proc/sys/vm/drop_caches
身份执行。
根据 docker-desktop-data