限制wsl运行内存


可以使用以下两种方式为每次启动 WSL 时自动应用的已安装 Linux 分发版配置设置:

  1. .wslconfig ,用于在 WSL 2 上运行的所有已安装分发版 全局 配置设置。
  2. wsl.conf 为 WSL 1 或 WSL 2 上运行的 Linux 发行版配置 每个分发 版的设置。

wsl.conf

  1. 以 /etc unix 文件的形式存储在分发目录中。
  2. 用于按分布配置设置。 此文件中配置的设置将仅应用于包含存储此文件的目录的特定 Linux 分发版。
  3. 可用于版本、WSL 1 或 WSL 2 运行的分发版。
  4. 若要访问已安装的发行版的 /etc 目录,请使用发行版的命令行和 cd / 访问根目录,然后使用 ls 列出文件或使用 explorer.exe . 在 Windows 文件资源管理器中查看。
  5. 目录路径应如下所示: /etc/wsl.conf

.wslconfig

  1. 存储在目录中 %UserProfile% 。
  2. 用于跨作为 WSL 2 版本运行的所有已安装 Linux 分发版全局配置设置。
  3. 只能用于 WSL 2 运行的分发版。 作为 WSL 1 运行的分发版不会受到此配置的影响,因为它们未作为虚拟机运行。
  4. 要访问 %UserProfile% 目录,请在 PowerShell 中使用 cd ~ 访问主目录(通常是用户配置文件 C:\Users\<UserName>),或者可以打开 Windows 文件资源管理器并在地址栏中输入 %UserProfile%。
  5. 目录路径应如下所示: C:\Users\<UserName>\.wslconfig

WSL 将检测这些文件是否存在、读取内容,并在每次启动 WSL 时自动应用配置设置。 如果文件丢失或格式不正确, (标记格式不正确) ,则 WSL 将继续按正常方式启动,而无需应用配置设置。

wsl.conf 示例配置

wsl.conf下面的示例文件演示了一些可用的配置选项。 在此示例中,分发为 Ubuntu-20.04,文件路径为 \\wsl.localhost\Ubuntu-20.04\etc\wsl.conf

# Automatically mount Windows drive when the distribution is launched
[automount]

# Set to true will automount fixed drives (C:/ or D:/) with DrvFs under the root directory set above. Set to false means drives won't be mounted automatically, but need to be mounted manually or with fstab.
enabled = true

# Sets the directory where fixed drives will be automatically mounted. This example changes the mount location, so your C-drive would be /c, rather than the default /mnt/c. 
root = /

# DrvFs-specific options can be specified.  
options = "metadata,uid=1003,gid=1003,umask=077,fmask=11,case=off"

# Sets the `/etc/fstab` file to be processed when a WSL distribution is launched.
mountFsTab = true

# Network host settings that enable the DNS server used by WSL 2. This example changes the hostname, sets generateHosts to false, preventing WSL from the default behavior of auto-generating /etc/hosts, and sets generateResolvConf to false, preventing WSL from auto-generating /etc/resolv.conf, so that you can create your own (ie. nameserver 1.1.1.1).
[network]
hostname = DemoHost
generateHosts = false
generateResolvConf = false

# Set whether WSL supports interop process like launching Windows apps and adding path variables. Setting these to false will block the launch of Windows processes and block adding $PATH environment variables.
[interop]
enabled = false
appendWindowsPath = false

# Set the user when launching a distribution with WSL.
[user]
default = DemoUser

# Set a command to run when a new WSL instance launches. This example starts the Docker container service.
[boot]
command = service docker start

.wslconfig示例配置

.wslconfig下面的示例文件演示了一些可用的配置选项。 在此示例中,文件路径为 C:\Users\<UserName>\.wslconfig

# Settings apply across all Linux distros running on WSL 2
[wsl2]

# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=4GB 

# Sets the VM to use two virtual processors
processors=2

# Specify a custom Linux kernel to use with your installed distros. The default kernel used can be found at https://github.com/microsoft/WSL2-Linux-Kernel
kernel=C:\\temp\\myCustomKernel

# Sets additional kernel parameters, in this case enabling older Linux base images such as Centos 6
kernelCommandLine = vsyscall=emulate

# Sets amount of swap storage space to 8GB, default is 25% of available RAM
swap=8GB

# Sets swapfile path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx
swapfile=C:\\temp\\wsl-swap.vhdx

# Disable page reporting so WSL retains all allocated memory claimed from Windows and releases none back when free
pageReporting=false

# Turn off default connection to bind WSL 2 localhost to Windows localhost
localhostforwarding=true

# Disables nested virtualization
nestedVirtualization=false

# Turns on output console showing contents of dmesg when opening a WSL 2 distro for debugging
debugConsole=true

限制wsl内存使用

使用.wslconfig文件来限制内存。在你的用户主目录下新建.wslconfig文件,例如:C:\Users\dj144为我的主目录,dj144应该换成你的主目录名称。

[wsl2]
processors=8
memory=8GB
swap=8GB
localhostForwarding=true

根据你的情况调整,并不是所有字段都需要设置。

另外还可以通过wsl --shutdown直接关闭wsl进程,这样就可以直接降低使用内存。

用法: wsl.exe [Argument] [Options...] [CommandLine]

用于运行 Linux 二进制文件的参数:

    如果未提供命令,wsl.exe 将启动默认 shell。

    --exec, -e <CommandLine>
        在不使用默认 Linux shell 的情况下执行指定的命令。

    --shell-type <Type>
        使用提供的 shell 类型执行指定的命令。

        类型:
            standard
                使用默认 Linux shell 执行指定的命令。

            login
                使用默认 Linux shell 作为登录 shell 执行指定的命令。

            none
                在不使用默认 Linux shell 的情况下执行指定的命令。

    --
        按当前方式传递剩余的命令行。

选项:
    --cd <Directory>
        将指定目录设置为当前工作目录。
        如果使用 ~,则将使用 Linux 用户的主路径。如果路径
        以 / 字符开头,则将该路径解释为绝对 Linux 路径。
        否则,该值必须为绝对 Windows 路径。

    --distribution, -d <Distro>
        运行指定的分发。

    --user, -u <UserName>
        以指定的用户身份运行。

    --system
        为系统分发启动 shell。

用于管理适用于 Linux 的 Windows 子系统的参数:

    --help
        显示用法信息。

    --debug-shell
        打开 WSL2 调试 shell 进行诊断。

    --install [Distro] [Options...]
        安装适用于 Linux 的 Windows 子系统分发。
        若要获取可用的分发列表,请使用 'wsl.exe --list --online'.

        选项:
            --no-launch, -n
                安装后不启动分发。

            --web-download
                从 Internet 而不是 Microsoft Store 下载分发。

    --mount <Disk>
        在所有 WSL 2 分发中附加并安装物理或虚拟磁盘。

        选项:
            --vhd
                指定 <Disk> 是指虚拟硬盘。

            --bare
                将磁盘附加到 WSL 2,但不进行安装。

            --name <Name>
                对安装点使用自定义名称安装磁盘。

            --type <Type>
                安装磁盘时要使用的文件系统,如果未指定,则默认为 ext4。

            --options <Options>
                其他安装选项。

            --partition <Index>
                要安装的分区索引,如果未指定,则默认为整个磁盘。

    --set-default-version <Version>
        更改新分发的默认安装版本。

    --shutdown
        立即终止所有正在运行的分发和 WSL 2
        轻型实用程序虚拟机。

    --status
        显示适用于 Linux 的 Windows 子系统的状态。

    --unmount [Disk]
        从所有 WSL 2 分发中卸载并分离磁盘。
        如果在没有参数的情况下调用,则卸载和分离所有磁盘。

    --update
        更新适用于 Linux 的 Windows 子系统包。

        选项:
            --web-download
                从 Internet 而不是 Microsoft Store 下载更新。

            --pre-release
                如果有预发行版本则进行下载。表明将使用 --web-download。

    --version, -v
        显示版本信息。

用于在适用于 Linux 的 Windows 子系统中管理分发的参数:

    --export <Distro> <FileName> [Options]
        将分发导出为 tar 文件。
        对于标准输出,文件名可以为 -。

        Options:
            --vhd
                指定分发应导出为 .vhdx 文件。

    --import <Distro> <InstallLocation> <FileName> [Options]
        将指定的 tar 文件作为新的分发导入。
        对于标准输入,文件名可以为 -。

        Options:
            --version <Version>
                指定新的分发要使用的版本。

            --vhd
                指定提供的文件是 .vhdx 文件, 而不是 tar 文件。
                此操作会在指定的安装位置复制 .vhdx 文件。

    --import-in-place <Distro> <FileName>
        将指定的 .vhdx 导入为新的分发。
        此虚拟硬盘必须使用 ext4 文件系统类型进行格式化。

    --list, -l [Options]
        列出分发。

        选项:
            --all
                列出所有分发,包括
                当前正在安装或卸载的分发。

            --running
                仅列出正在运行的分发。

            --quiet, -q
                仅显示分发名称。

            --verbose, -v
                显示有关所有分发的详细信息。

            --online, -o
                使用 'wsl.exe --install' 显示可用于安装的分发列表。

    --set-default, -s <Distro>
        将分发设置为默认。

    --set-version <Distro> <Version>
        更改指定分发的版本。

    --terminate, -t <Distro>
        终止指定的分发。

    --unregister <Distro>
        注销分发并删除根文件系统。