タスクマネージャーのプロセスタブやパフォーマンスタブをパッと見ただけでは分からない、メモリを異常に多く消費しているプロセスを確認する方法をまとめた備忘録記事です。
Windows10でウェブブラウザ『Firefox』や『Google Chrome』を使っていると、不自然にクラッシュする事態に遭遇。
トラブルの原因になりそうな設定の変更や大きなアップデートを直近でしていなかったので、タスクマネージャーを確認してみると、メモリの使用量が異様に多くなっていた。
しかし、一見するとプログラムで消費しているメモリ使用量とは辻褄が合わなくておかしい。メモリリークぽいけど、さてどうしたものか…。
ということで、メモリを大量に使用しているプロセスを確認して対処した際の備忘録です!
トラブルの概要
タスクマネージャーのパフォーマンスタブでメモリの使用状況を確認してみると、メモリ構成における「変更済み」の領域が肥大していた。
「変更済み」のメモリは、ディスクに書き込む必要があるキャッシュで、メモリ領域を占有する。
このキャッシュはディスクに書き込まれていくことで、本来は徐々に減るようだが、何かしら不具合があると溜まっていき、異様に大きくなることがある模様。いわゆるメモリリーク。
ということで、タスクマネージャーやリソースモニターを使って、プロセスが消費しているメモリ量の詳細を確認し、メモリリーク元を特定していく。
イベントビューアーにも仮想メモリの不足状態という形式で警告が表示されていた。
イベントビューアーにも警告ログが残ってました。メモリを多く消費しているプログラムが表示されますけど、バイト表示だったりする部分も含めて、ちょっと分かりにくいです。
環境メモ
- エディション:Windows10 Pro
- バージョン:20H2
- OSビルド:19042.867
確認方法
基本的にはWindows標準の「タスクマネージャー」か「リソースモニター」ツールを利用。
プロセスが使用している「アクティブなメモリ」&「仮想メモリ(コミット)」をチェックしてメモリ消費が異常なプロセスを特定する。
プロセスの詳細確認・再起動・終了なども出来る点も含めて、大抵の場合はタスクマネージャーで事足りると思います。
タスクマネージャー
詳細タブにアクセス
まずはタスクマネージャーの「詳細」タブにアクセス。初期状態ではコミットサイズが表示されていなかったので、表示を追加する。
「名前」「PID」などの項目が表示されているバーの部分を右クリックして、メニューから「列の選択」をクリック。
コミットサイズを追加
「コミットサイズ」にチェックを入れてOKをクリックする。
メモリ(アクティブなプライベートワーキングセット)にもチェックが付いていることを確認。
メモリ消費を確認
詳細タブの項目に「コミットサイズ」が追加されたら、「メモリ(アクティブなプライベートワーキングセット)」と合わせて、メモリ使用量が不自然に大きくなっているプロセスを探す。
プロセスのメモリ使用量の実態は「コミットサイズ」で判断しておけば大体OK!
トラブルの原因はWindowsUpdateに関連するプロセス「MoUsoCoreWorker.exe」でした。
対処方法
コミットサイズが異様に膨れ上がっていた「MoUsoCoreWorker.exe」は、Windows Update関連のプログラム。
Windows Updateを確認してみても、3GB近くにもなるような更新のダウンロードやインストールなどもない状態だったので、何らかの不具合・エラーがあったのだと思われる。
今回の対処方法については、おそらく以下の3種類。
- プロセスの終了/再起動(タスクの終了)
- Windowsの再起動
- Windows Updateの実行(オプションアップデートのインストール)
タスクの終了を試してみたところ、「変更済み」のメモリサイズが「3600MB→500MB」まで解放されていた。
対処法は問題を起こしているプロセス毎に違うと思われる。
一過性の不具合なら「プロセスの終了/再起動」→「Windowsの再起動」。
プログラムやドライバーに問題がありそうな場合は、それ自体の「アンインストール/再インストール/アップデート」が必要なケースも考えられる。
参考にしたマイクロソフトコミュニティのトピックによると、エクスプローラー(explorer.exe)が原因となることもあるようです。
Windowsはほんとに謎だらけです。
リソースモニター
リソースモニターで確認する場合は、内容を見やすい「メモリ」タブにアクセス。
「プライベート」と「コミット」のメモリサイズを確認する。
Process Explorer
Microsoftが配布しているタスクマネージャーの高機能版的なツール群『Sysinternals』に含まれるプロセスユーティリティー『Process Explorer』も利用できる。
より詳細にプロセスのメモリ使用情報を得たい場合などに使えそうです。
あからさまに分かりやすいメモリリークを探す場合には特に必要ないと思います。
パフォーマンスモニター
奥の手となりそうな「パフォーマンスモニター」を使用したメモリリークの検出・特定方法。
判別するためには数時間掛かることもあるようで敷居が高い。
参考情報
まとめ
MoUsoCoreWorker.exeのコミットが異様に大きくなった理由は分かりませんが、プロセスの再起動後から3日くらいの間には再発していないので様子を見ています。
メモリの使用量は、パソコンの動作が遅い・重いって時くらいしか気にしていませんでした。
タスクマネージャーのメモリ構成も意識したことがなかったので、今後は少し気をつけて見ておこうと思います。