WSL2 + Docker 環境でVSCode を利用して開発していると、急に重くなって動かなくなる現象が頻発した。
タスクマネージャーで確認したところ、VmmemWSLというプロセスがメモリを上限まで使い切りディスクアクセス100%状態になることが原因で処理が激重になっていることがわかった。
現象
- ローカルの開発環境にブラウザアクセスすると、メモリの使用量が増える。
- VSCodeを終了するとメモリが開放される。
- PHP Symfony のアプリを書いているときに顕著に発生する。
解決策
最初は .wsconfig の設定変更でなんとかなるかと試行錯誤してみたが、改善しなかった。
なお、.wsconfig の設定などについては、Google検索 (WSL2 メモリ)ですぐ出てくるのでそちらを参照。
現象からみて、VSCodeの設定や拡張機能に問題がありそうだと狙いをつけいろいろと試した結果、ファイル監視が問題であったことが判明。
- VSCodeの設定を開く( ctrl + , )
- Files: Watcher Exclude を検索
- **/var/** をパターン追加(Symfonyの場合)
メモリが異常に増えることが無くなり、ディスクアクセスが100%になることも無くなった。
なお、設定はワークスペースで行うのが良い。
解説
Symfonyの場合、appディレクトリの直下に/var/というディレクトリが作成され、そこにキャッシュやログが生成される。
ローカル開発環境でアプリをブラウザで参照すると、ここにキャッシュやログが生成されることになるのだが、VSCodeのプロジェクトフォルダの配下にあるディレクトリなので、ファイル監視の対象となってしまっている。そのため、ブラウザでアプリにアクセスするたびにファイル更新が行われ大量のメモリを食べてしまっていたようだ。
今回は面倒なので、**/var/** と設定したが、より細かく指定するのであればワークスペースの設定として以下のようにすれば良い。
**/var/cache/**
**/var/log/**
Symfony以外のフレームワークでは、キャッシュの保存場所が違うと思うので、ワークスペース単位で適宜設定すると良いだろう。
Laravel sail での開発環境ではキャッシュをしない設定がベースになっていたかと思うので、こんなトラブルには見舞われず見逃していたようだ。盲点だった。
同様の問題に苦しんでる場合は、アプリケーションが動的に生成するキャッシュやログなどがファイル監視の対象に含まれていないか、原因のひとつとして調べてみると良いと思う。
コメント