はじめに (対象読者・この記事でわかること)
この記事は、WSL 1を使用している開発者、特にメモリを大量に消費するアプリケーション(データサイエンス、機械学習、大規模なデータ処理など)を動かしたい方を対象としています。
この記事を読むことで、WSL 1のメモリ管理の仕組みを理解し、swapファイルの作成と設定方法、WSL 1のメモリ割り当て量の調整方法、起動オプションの変更によるメモリ確保方法を学ぶことができます。これにより、メモリ不足によるアプリケーションのクラッシュやパフォーマンス低下を防ぎ、WSL 1上での作業をよりスムーズに進められるようになります。
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。 - WSL 1の基本的な知識 - Linuxのコマンドライン操作の基本的な知識 - WindowsのコマンドプロンプトやPowerShellの基本的な操作
WSL 1のメモリ制限について
WSL 1は、Windows上でLinux環境を実行するための技術ですが、メモリ使用量に制限があります。デフォルトでは、物理メモリの半分までしか使用できない設定になっています。これは、WindowsとLinuxの両方のOSが同時に実行されるため、システム全体の安定性を保つための措置です。
特に、メモリを大量に消費するアプリケーション(データサイエンス、機械学習、大規模なデータ処理など)をWSL 1上で実行しようとすると、このメモリ制限がボトルネックになることがあります。メモリ不足により、アプリケーションがクラッシュしたり、パフォーマンスが著しく低下したりする可能性があります。
メモリ制限を確認するには、WindowsのコマンドプロンプトやPowerShellで以下のコマンドを実行します。
wsl --list --verbose
このコマンドを実行すると、現在インストールされているWSLディストリビューションのリストと、それぞれのメモリ使用量の上限が表示されます。また、Linux側でfree -hコマンドを実行することで、現在のメモリ使用状況を確認することもできます。
大量のメモリを確保する具体的な方法
ステップ1:現在のメモリ使用状況の確認
まずは、現在のメモリ使用状況を確認します。Linux側で以下のコマンドを実行します。
free -h
このコマンドを実行すると、合計メモリ量、使用済みメモリ量、空きメモリ量、スワップ領域の使用状況などが表示されます。ここで、使用可能なメモリ量が不足している場合、swapファイルの設定やメモリ割り当て量の調整が必要です。
ステップ2:swapファイルの作成と設定
swapファイルは、物理メモリが不足した場合に使用される仮想メモリ領域です。WSL 1でもswapファイルを作成することで、有効なメモリ容量を増やすことができます。
まず、swapファイルを作成するディレクトリに移動します。一般的には/varディレクトリ内に作成します。
cd /var
次に、swapファイルを作成します。ここでは、4GBのswapファイルを作成する例を示します。
sudo fallocate -l 4G swapfile
fallocateコマンドが利用できない場合は、ddコマンドを使用します。
sudo dd if=/dev/zero of=swapfile bs=1M count=4096
次に、作成したファイルのパーミッションを設定します。
sudo chmod 600 swapfile
そして、swapファイルをフォーマットします。
sudo mkswap swapfile
最後に、swapファイルを有効にします。
sudo swapon swapfile
これでswapファイルが有効になります。確認するには、free -hコマンドを実行します。
swapファイルを永続的に有効にするには、/etc/fstabファイルに以下の行を追加します。
/var/swapfile none swap sw 0 0
ステップ3:WSL 1のメモリ割り当て量の調整
WSL 1のメモリ割り当て量を調整するには、Windowsのレジストリを編集します。まず、WindowsのコマンドプロンプトまたはPowerShellを管理者として実行します。
次に、以下のコマンドを実行してレジストリエディタを開きます。
regedit
レジストリエディタで、以下のパスに移動します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WSL
ここで、MemoryというDWORD値を作成または編集します。この値は、メモリ割り当て量をMB単位で指定します。例えば、8GBのメモリを割り当てる場合は、8388608(8 * 1024 * 1024)を指定します。
ステップ4:起動オプションの変更
WSL 1の起動オプションを変更することで、メモリ使用量を調整することもできます。まず、WindowsのコマンドプロンプトまたはPowerShellを管理者として実行します。
次に、以下のコマンドを実行してWSLの設定ファイルを開きます。
notepad %USERPROFILE%\.wslconfig
もしファイルが存在しない場合は、新しく作成します。ファイルに以下の内容を追加します。
[wsl2]
memory=8GB
ここで、memoryの値を調整することで、WSL 2に割り当てるメモリ量を変更できます。ただし、この設定はWSL 2にのみ適用されるため、WSL 1を使用している場合は効果がありません。WSL 1を使用している場合は、前述のレジストリ編集が必要です。
ハマった点やエラー解決
問題1:swapファイルの作成に失敗する
swapファイルの作成中に、fallocateコマンドが利用できないエラーが発生することがあります。これは、ファイルシステムがfallocateをサポートしていない場合に発生します。
解決策
この問題を解決するには、ddコマンドを使用してswapファイルを作成します。
sudo dd if=/dev/zero of=swapfile bs=1M count=4096
このコマンドは、指定されたサイズのファイルをゼロで埋めて作成します。ただし、fallocateに比べて時間がかかる場合があります。
問題2:メモリ割り当て量の変更が反映されない
レジストリを編集してメモリ割り当て量を変更したにもかかわらず、変更が反映されないことがあります。
解決策
この問題を解決するには、WSLを再起動する必要があります。WindowsのコマンドプロンプトまたはPowerShellで以下のコマンドを実行します。
wsl --shutdown
その後、WSLを再起動します。
wsl
これで、変更が反映されるはずです。
問題3:swapファイルが有効にならない
swapファイルを作成したものの、swaponコマンド実行時にエラーが発生することがあります。
解決策
この問題を解決するには、swapファイルのパーミッションを確認します。swapファイルは、rootユーザーのみが読み書きできるように設定する必要があります。
sudo chmod 600 swapfile
また、swapファイルがすでに使用中でないかも確認します。
sudo swapoff swapfile
その後、再度swaponコマンドを実行します。
sudo swapon swapfile
まとめ
本記事では、WSL 1で大量のメモリを確保する方法について解説しました。
- WSL 1のメモリ制限の確認方法
- swapファイルの作成と設定方法
- WSL 1のメモリ割り当て量の調整方法
- 起動オプションの変更によるメモリ確保方法
- よくある問題とその解決策
この記事を通して、WSL 1上でメモリを大量に消費するアプリケーションをスムーズに実行できるようになることを目指しました。今後は、WSL 2のメモリ管理やパフォーマンスチューニングについても記事にする予定です。
参考資料
- Microsoft Docs - WSL のメモリとプロセッサの制限
- WSL 1 で swap ファイルを設定する方法
- Linux swap space configuration
- WSL 1 メモリ制限の変更方法
