メモリ不足で WSL が起動できない場合に起動させる

WSL を起動したいけどメモリが少ない PC だとこういうエラーが出ることがある

システム リソースが不足しているため、要求されたサービスを完了できません。
エラー コード: Wsl/Service/CreateInstance/CreateVm/HCS/0x800705aa

メモリ残量が少ないと起動できなくしてるみたい
ただこれはそのときの物理メモリ残量を見てるだけで仮想メモリは考慮されてない
なので起動中アプリを終了してメモリを空けるということはしなくても、今物理メモリにあるものをページファイルに移して一旦物理メモリを空ければ起動できる
これを WSL 起動時に自動でやってくれればいいのにやってくれない

調べても Windows 標準の機能でこの操作を行うものはなさそう
昔、メモリクリーナーみたいなフリーソフトでできるものがあったけど exe のインストールは避けたい

試してると適当なプログラムで、メモリを使用→そのプロセスを終了、とするだけでできた
メモリを確保すると物理メモリ側に確保されて他アプリの使用中メモリがページファイルに移される
プロセスを終了すると物理メモリが解放されるけど、他アプリをアクティブにしてメモリにアクセスしなければ物理メモリに移されないので直後は物理メモリが空いたままになる
タスクマネージャーのグラフは物理メモリの使用量なのでそこでわかる

Python で試したけど Python は Windows に標準では入ってないので、準備のいらない PowerShell でやる

$a = ,0 * (1024*1024*128)

PowerShell 上の整数ひとつが実際に何バイトかは知らないけど、 int32 だから単純に 4 バイトとすると、これで 512MiB のメモリを確保できる
1024 * 1024 * 256 以上は上限を超えるようでエラーになった
確保したいメモリ量が多いなら↑を別変数に入れて複数回実行するか、ループで指定回数回すようにする

ちなみに単純に配列のサイズを確保するだけだと、コミット済みの数値が増えるだけで物理メモリは確保されないようでグラフに変動はなかった

$a = new-object int[] (1024*1024*128)