限制wsl运行内存
可以使用以下两种方式为每次启动 WSL 时自动应用的已安装 Linux 分发版配置设置:
- .wslconfig ,用于在 WSL 2 上运行的所有已安装分发版 全局 配置设置。
- wsl.conf 为 WSL 1 或 WSL 2 上运行的 Linux 发行版配置 每个分发 版的设置。
wsl.conf
- 以 /etc unix 文件的形式存储在分发目录中。
- 用于按分布配置设置。 此文件中配置的设置将仅应用于包含存储此文件的目录的特定 Linux 分发版。
- 可用于版本、WSL 1 或 WSL 2 运行的分发版。
- 若要访问已安装的发行版的 /etc 目录,请使用发行版的命令行和 cd / 访问根目录,然后使用 ls 列出文件或使用 explorer.exe . 在 Windows 文件资源管理器中查看。
- 目录路径应如下所示: /etc/wsl.conf
.wslconfig
- 存储在目录中 %UserProfile% 。
- 用于跨作为 WSL 2 版本运行的所有已安装 Linux 分发版全局配置设置。
- 只能用于 WSL 2 运行的分发版。 作为 WSL 1 运行的分发版不会受到此配置的影响,因为它们未作为虚拟机运行。
- 要访问 %UserProfile% 目录,请在 PowerShell 中使用 cd ~ 访问主目录(通常是用户配置文件 C:\Users\<UserName>),或者可以打开 Windows 文件资源管理器并在地址栏中输入 %UserProfile%。
- 目录路径应如下所示: 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>
注销分发并删除根文件系统。