解决WSL2中Vmmem内存占用过大问题
- 按下Windows + R 键,输入 %UserProfile% 并运行进入用户文件夹
- 新建文件 .wslconfig ,然后记事本编辑
- 填入以下内容并保存, memory为系统内存上限,这里限制最大2gb,可根据自身电脑配置设置
- 然后启动cmd命令提示符,输入 wsl --shutdown 来关闭当前的子系统
1 2 3 4 |
[wsl2] memory=2GB swap=0 localhostForwarding=true |
.wslconfig文件中可以配置的参数比较多,可以参考官方文档: https://docs.microsoft.com/en-us/windows/wsl/wsl-config#configure-global-options-with-wslconfig
WSL配置固定ip
StartSubLinux.bat
这里设置wsl中linux的ip为192.168.120.100,windows端ip为192.168.120.10,当然,这两个ip可以根据需要自行设置,只要不和现在网络冲突即可,之后,就可以在windows上使用如SecureCRT等ssh工具通过192.168.120.100登录并操作linux子系统
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
@echo off setlocal enabledelayedexpansion ::先停掉可能在运行中的wsl实例 wsl --shutdown ubuntu ::重新启动wsl 并以root用户身份启动ssh服务方便使用ssh工具连接 ::wsl -u root service ssh start wsl -u root service ssh start | findstr "Starting OpenBSD" > nul if !errorlevel! equ 0 ( echo ssh start success :: 检查我们需要的IP是否已经存在 wsl -u root ip addr | findstr "192.168.120.100" > nul if !errorlevel! equ 0 ( echo wsl ip has set ) else ( :: 如果不存在的话 立即设置上 wsl -u root ip addr add 192.168.120.100/24 broadcast 192.168.120.0 dev eth0 label eth0:1 echo set wsl ip success: 192.168.120.100 ) ::windows作为wsl的宿主 在wsl的固定IP的同一网段也配置一个IP 实现互通 ipconfig | findstr "192.168.120.10" > nul if !errorlevel! equ 0 ( echo windows ip has set ) else ( netsh interface ip add address "vEthernet (WSL)" 192.168.120.10 255.255.255.0 echo set windows ip success: 192.168.120.10 ) ) ::pause |
让Frp在windows下开机自动运行
使用windows的linux子系统时,会发现,每次重启系统,linux的ip都会不同,如果使用如SecureCRT这类工具连接linux子系统时,会因为ip地址不固定而非常不爽,一个解决方案就是使用frp进行穿透
github上frp项目: https://github.com/fatedier/frp
frp拥有超50k的star,超9k的fork和超1k的watch,这些指标足以说明frp的实力。这里用来做本机与linux子系统间的代理,实际上是大才小用了。
整体的架构是 在windows上启动server端,在linux子系统上启动客户端,客户端将本地ssh接口通过服务端代理出来,这样,在windows上就可以以windows自己的ip(最好是一个固定的ip,否则意义就不大了)来远程登录ssh了
client端的配置(linux)
1 2 3 4 5 6 |
#!/bin/bash echo "start frpc client ..." cd /tmp nohup /etc/frpc/frpc -c /etc/frpc/frpc.ini >/dev/null 2>&1 & |
/etc/frpc/frpc.ini
1 2 3 4 5 6 7 8 9 10 11 |
[common] server_addr = 192.168.120.10 server_port = 7000 token = enticat12345678 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 2233 remote_port = 7001 |
服务端的配置(windows)
frps.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[common] bind_addr = 0.0.0.0 bind_port = 7000 dashboard_addr = 127.0.0.1 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = admin log_file = "D:/Software/frp/logs/frps.log" log_level = info log_max_days = 3 disable_log_color = true token = enticat12345678 max_pool_count = 5 allow_ports = 7001 max_ports_per_client = 0 |
startfrp.vbs 启动脚本
1 2 |
Set ws = CreateObject("Wscript.Shell") ws.run "D:\Software\frp\frps.exe -c D:\Software\frp\frps.ini",vbhide |
用启动脚本每次开机都需要执行一下,还可以让服务开机自启。尝试注册为windows服务,失败,因为frps无法在后台运行
1 2 3 4 |
sc create FrpServer binpath= "\"D:\Program Files\frp\frps.exe\" -c \"D:\Program Files\frp\frps.ini\"" displayname= "SSH For SubLinux" start= auto type= own sc qc FrpServer sc start FrpServer sc delete FrpServer |
于是使用 任务计划程序。完美解决
转载请注明:轻风博客 » windows下wsl2使用技巧