2
1

More than 1 year has passed since last update.

WSL2に割り当てられるメモリ量について(反省)

Posted at

1.この記事の内容

この記事では,WSL2に割り当てられるメモリ量とパソコンに搭載しているメモリ量がデフォルトで異なることを失念していたことに対する筆者の反省です.

本記事を執筆時点の下記バージョンでは,パソコンに搭載しているメモリ量の半分がWSL2に割り当てられるようです.

エディション	Windows 11 Home
バージョン	22H2
インストール日	‎2022/‎05/‎15
OS ビルド	22631.1972
エクスペリエンス	Windows Feature Experience Pack 1000.22658.1000.0

2.背景

WSL2上でJupyter NotebookをDockerで動かしている際に,大きなサイズのデータ処理をしていると,Jupyter Notebookが頻繁にクラッシュしました.
タスクマネージャーでメモリ使用量を見ても70%~80%程度しか使用していない状況でこの現象が発生し,ハマっていたのですが,WSL2に割り当てられたメモリ量をオーバーしていました.

3.反省と対策

ちゃんとDockerコンテナが使用しているメモリ量を計測せねばならないという反省をふまえ,docker statsで使用中のメモリ量をログに残す対策を丁寧にやろうと思います.

#! /bin/bash

while true; do
        docker stats --no-stream | tee --append docker_stats.log
        sleep 1
done

docker statsでデフォルトでは下記のように,1行目に項目名,2行目以降で動かしているDockerコンテナのプロファイルが出力されます.

$ docker stats --no-stream
CONTAINER ID   NAME                                 CPU %     MEM USAGE / LIMIT     MEM %     NET I/O         BLOCK I/O   PIDS
e477720561df   20230708_sake_name_searching_env_1   18.40%    4.562GiB / 15.55GiB   29.33%    146MB / 172MB   0B / 0B     71

--formatオプションで出力形式を指定することができ,例えばコンマ区切りで出力するとcsv形式でログを残すことができます.

$ docker stats --no-stream --format "{{.Name}}, {{.MemUsage}}"
20230708_sake_name_searching_env_1, 4.582GiB / 15.55GiB

出力形式を指定する際にも,先頭にtable指定をすることで,1行目に項目名を出力することもできます.

$ docker stats --no-stream --format "table{{.Name}}, {{.MemUsage}}"
NAME, MEM USAGE / LIMIT
20230708_sake_name_searching_env_1, 4.587GiB / 15.55GiB

4.関連リンク

2
1
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
2
1