ずっと詰まっていたこと
.wslconfigが適用されない。 配置場所もファイル名も記述内容もバージョンも正しいはずなのに。
.wslconfigとは
WSL2を使用するときにメモリの使用量やらなんやら色々設定するファイル。
何が設定できるのかはMSのドキュメントを見に行ってください。
必要な環境
- windows10 Home バージョン2004 (OSビルド19041) 以降
- 何らかのLinuxディストリビューション
私の環境
- windows10 Home バージョン21H2 (OSビルド19044.1387)
- MSストアのUbuntu(Ubuntu 20.04 LTS)
.wslconfigの作成方法
%UserProfile%
に .wslconfig
というファイルを作成する。
私はメモリの枯渇を止めたかったので次のように記述。
[wsl2]
memory=2GB
swap=8GB
以下を参考に。
しかし、うまく適用されなかった。
結論
UTF-8 BOM付きで .wslconfig
を作成していたことが原因だった。
UTF-8 BOM 無しで .wslconfig
を作成しなければならない。
検証して失敗した行動
書き換えた.wslconfig
を適用させる手順。
- PowerShellを起動。
-
wsl --shutdown
を実行。 -
.wslconfig
を書き換える。 -
wsl
を実行。 -
free -h
を実行して.wslconfig
が適用されているか確認する。
memory
、swap
の記述を変化させる。
memory
は3GB、3Gi、1.5GB、1500MBを、swap
は0を試した。
.wslconfig
が適用されるかには関係なかったようで失敗。
改行コードをLFに変更
Linuxを完全に理解している 1 ので、Linuxということで改行コードを変更してみた。
CRLFでもLFでも.wslconfig
は問題なく適用される。無関係だった。
高速スタートアップの無効化
Win10にある高速スタートアップという機能を使用しているとWSL2に影響を及ぼすという記述を見かける。
高速スタートアップを無効化し、Win10を再起動した。
少なくともメモリには関係なかったようで失敗。
free -h
では.wslconfig
が適用されているかわからないのではという検討
WSL2+VSCode+Dockerをしばらく動かし続ける。
無事にメモリが枯渇する。
.wslconfig
が適用されている現在、free -h
は適切に確保したメモリを表示してくれる。
$ free -h
total used free shared buff/cache available
Mem: 1.9Gi 77Mi 1.8Gi 0.0Ki 32Mi 1.8Gi
Swap: 8.0Gi 0B 8.0Gi
BOM付きで問題が発生するものは多いらしい
utf8 bom とは
などで検索するとBOMが問題を起こすものが出てくる出てくる。
Unicodeで作成されたことを明記しておくモノのようだが、UTF-8では推奨されないモノらしい。逆にUTF-16では必要だとか。
知らなかったので新規作成→テキストドキュメントで作成して、内容を記述し保存、拡張子を変える要領で.wslconfig
としていた。
-
つまりは何も理解していないということ。 ↩