WSLの最適化いろいろまとめ
WSLは便利ですが色々困ることがあるのでその解消法をメモします。ネットに散らばっている情報ですが、まあまとめるのもいいでしょう。
メモリの最大使用量の制限
何の設定もしないと、PCにあるメモリの50%を上限に使ってしまうためかなり苦しくなります。そこでメモリの使用最大値を設定してバカ食いをやめさせます。
Powershellを立ち上げて、windows側のフォルダC:\User\{名前}
に.wslconfigというファイルを作ります。デフォルトでpower-shellを立ち上げると多分そのままそのフォルダで開くので以下のコマンドを打ちます。
New-Item .wslconfig
そのファイルに以下のように記載します。メモリサイズには制限したい数を入れます。
[wsl2]
memory=4GB
wslを一度落として、再度立ち上げると設定が反映されます。上記の場合、最大で4GBまでしか使わないようになります。
wsl --shutdown
今使っているメモリの解放
作業中にメモリ確保が溜まってきてしまった場合は以下のコマンドでメモリを開放します。.wslconfigファイルでは上限値を決めることでメモリの暴走を制限するのに対し、こちらはキャッシュをクリアして開放するイメージです。wslを立ち上げて、ターミナルで以下のコマンドを打てばよいです。
sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches"
データ容量の削減
WSL上でファイルを削除しても思ったより容量が減らない時があります。Dockerとか使用しているとイメージが溜まりまくるのでdocker rmiとかで削除するのですが全然減らないなーとなります。これはどうも仮想ディスクとホスト側ディスクの仕組みに関係があるようです。以下の手順で最適化をして容量を確実に削減しましょう。
管理者権限でpower shellを開きます。まずはwslをシャットダウンしておきます。
wsl --shutdown
続いて仮想ディスクの場所を探します
Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss
Base Pathと書かれた場所をメモしたら、以下の最適化コマンドを実行しましょう
Optimize-VHD -Path <.vhdxファイルのフルパス> -Mode Full
これでWSLで削除したはずの容量の分だけホスト側の容量にも削減に反映されているはずです。
強制終了する
なんか挙動がおかしいなーとか、明示的に終了させないとなーとかってなった時にやります。
通常はホスト側のターミナル(コマンドプロンプトとかPower shell)を管理者権限で立ち上げて
wsl –shutdown
とすればいけるはずです。
ですが、なんかしらでバグって上記コマンドが効かない時があります。PCが異常な音を出し焼けるほど熱くなっていくのを見ると非常に焦ります。タスクマネージャーからも終了できないときは同じくコマンドプロンプトなどから管理者権限で
taskkill /f /im wslservice.exe
と打つと強制終了出来るようです。
aptのプロキシ設定
最適化じゃ全然ないですけどこれもよく使うのでついでにメモ。aptがプロキシで阻まれるときは以下の手順でプロキシ設定します。WSL側のターミナルの環境変数のファイルを使います
nano ~/.bashrc
***適当なところに以下の内容を記載する***
export http_proxy=http://username:password@proxy-host:proxy-port
export https_proxy=http://username:password@proxy-host:proxy-port
***認証が不要な時は****
export http_proxy=http://host:proxy-port
export https_proxy=http://host:proxy-port
WSLでVScodeの拡張機能を使う
pythonの拡張機能とか入れるとクラスやメソッドをサジェストしてくれます。非常に作業効率が良くなるので助かりますよね。でもWSL内で書いたpythonコードで急にその機能が使えなくなったりした事は無いですか?
実はVScodeの拡張機能はWSL側でも再度インストールをする必要があります。方法は簡単です。
- WSL側でVScodeを立ち上げる
- 拡張機能タブへ移動する
- 「Localインストール済み」に「WSL Ubuntuにインストールする」ボタンがあるのでそれを押下する
上図は実際の画面です。私はすでにpythonをローカル側にもWSL側にも入れているので、どちらにも入っている表示がされています。一方でrainbow csvという機能はローカル側しか入れていないので「WSLにインストールする」ボタンが活性化されています。簡単なのでサクッとやってしまいましょう。
他にも思いついたら追記していきます。