5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WSL2のメモリ枯渇問題にcronで毎分キャッシュドロップして対処する話

Last updated at Posted at 2020-08-07

はじめに

Always Onデバイスで問題を起こし、長らくアップデートを止められていたWindows 10 2004がようやく僕のSurface Laptop3にも降りてきました。

早速WSL2をと思ったところで、メイン機で発生したメモリ枯渇問題を思い出したのでcronを使って頻繁にキャッシュをドロップして対処してみました。

設定

Ubuntuを使用していますが、インストールしたデフォルトではcronが動いていないので動かします。

sudo service cron start

キャッシュを落とすコマンドはsudoして動かすので、(ごちゃごちゃやるのが面倒なので)rootのcrontabを使います。

sudo su

crontabでcronの設定を行います。初回は以後どのエディタを使うか聞かれますがお好みで。僕はVimを選択しました。

crontab -e

毎分キャッシュを落とすコマンド1を書きます。

* * * * * sh -c "echo 3 >'/proc/sys/vm/drop_caches' && swapoff -a && swapon -a"

ちなみに5分毎が良ければ以下のような感じになります。

*/5 * * * * sh -c "echo 3 >'/proc/sys/vm/drop_caches' && swapoff -a && swapon -a"

保存するとcronjobが有効になり、設定した時間間隔でコマンドが走ります。

様子

image.png

タスクマネージャーを観察していると1分後にVmmemのメモリ使用量が約1.1GBから666MBまで減少したので、きちんと動いているようです。

キャッシュを大量に必要とするような何かしらをWSL上で動かすときに惨事が発生しそうな気もするのですが、開発系のアプリケーション以外にも(主にTeamsとかOutlookとかのメモリ食い虫を)開いておかないといけない環境ですので、.wslconfigを触ってメモリ上限を決めるやり方よりは常にメモリが空いてくれている方が何かとうれしいのでこのやり方にしました。問題が起きるようならまた別の対策を考えます。

メインマシンならメモリが64GBあるので迷わず.wslconfigに上限32GBとか設定するのですが、Surface Laptop3は16GBしかないので……。

  1. https://qiita.com/yoichiwo7/items/e3e13b6fe2f32c4c6120

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?