
タスクマネージャーのプロセスタブやパフォーマンスタブをパッと見ただけでは分からない、メモリを異常に多く消費しているプロセスを確認する方法をまとめた備忘録記事です。
Windows10でウェブブラウザ『Firefox』や『Google Chrome』を使っていると、不自然にクラッシュする事態に遭遇。
トラブルの原因になりそうな設定の変更や大きなアップデートを直近でしていなかったので、タスクマネージャーを確認してみると、メモリの使用量が異様に多くなっていた。


しかし、一見するとプログラムで消費しているメモリ使用量とは辻褄が合わなくておかしい。メモリリークぽいけど、さてどうしたものか…。


ということで、メモリを大量に使用しているプロセスを確認して対処した際の備忘録です!
トラブルの概要


タスクマネージャーのパフォーマンスタブでメモリの使用状況を確認してみると、メモリ構成における「変更済み」の領域が肥大していた。
- 使用中:OSやプログラムで使用しているメモリ。メモリ領域を占有する。
- 変更済み:後でディスクに書き込む必要があるため留め置かれているキャッシュ。メモリ領域を占有する。
- スタンバイ:キャッシュとして利用しているメモリ。必要になれば解放され、空きメモリとして利用可能。
- 空き:未使用の空きメモリ
「変更済み」のメモリは、ディスクに書き込む必要があるキャッシュで、メモリ領域を占有する。
このキャッシュはディスクに書き込まれていくことで、本来は徐々に減るようだが、何かしら不具合があると溜まっていき、異様に大きくなることがある模様。いわゆるメモリリーク。
ということで、タスクマネージャーやリソースモニターを使って、プロセスが消費しているメモリ量の詳細を確認し、メモリリーク元を特定していく。


イベントビューアーにも仮想メモリの不足状態という形式で警告が表示されていた。


イベントビューアーにも警告ログが残ってました。メモリを多く消費しているプログラムが表示されますけど、バイト表示だったりする部分も含めて、ちょっと分かりにくいです。
環境メモ
- エディション:Windows10 Pro
- バージョン:20H2
- OSビルド:19042.867
確認方法
基本的にはWindows標準の「タスクマネージャー」か「リソースモニター」ツールを利用。
プロセスが使用している「アクティブなメモリ」&「仮想メモリ(コミット)」をチェックしてメモリ消費が異常なプロセスを特定する。


プロセスの詳細確認・再起動・終了なども出来る点も含めて、大抵の場合はタスクマネージャーで事足りると思います。
タスクマネージャー
- Windowsボタンを右クリックしてメニューから選択
- タスクバーを右クリックしてメニューから選択
- [Ctrl+Alt+Del]してメニューから選択
- 検索ボックスに「タスクマネージャー」を入力
詳細タブにアクセス


まずはタスクマネージャーの「詳細」タブにアクセス。初期状態ではコミットサイズが表示されていなかったので、表示を追加する。
「名前」「PID」などの項目が表示されているバーの部分を右クリックして、メニューから「列の選択」をクリック。
コミットサイズを追加


「コミットサイズ」にチェックを入れてOKをクリックする。
メモリ(アクティブなプライベートワーキングセット)にもチェックが付いていることを確認。
メモリ消費を確認
詳細タブの項目に「コミットサイズ」が追加されたら、「メモリ(アクティブなプライベートワーキングセット)」と合わせて、メモリ使用量が不自然に大きくなっているプロセスを探す。


このプロセスで使用されているため別のプロセスでは利用できない物理メモリの量(中断されたUWPプロセスを除く)。
プロセス用にオペレーティングシステムによって予約されている仮想メモリの量。
「物理メモリ+ページファイル」で確保されているサイズ。


プロセスのメモリ使用量の実態は「コミットサイズ」で判断しておけば大体OK!
トラブルの原因はWindowsUpdateに関連するプロセス「MoUsoCoreWorker.exe」でした。
対処方法


コミットサイズが異様に膨れ上がっていた「MoUsoCoreWorker.exe」は、Windows Update関連のプログラム。
Windows Updateを確認してみても、3GB近くにもなるような更新のダウンロードやインストールなどもない状態だったので、何らかの不具合・エラーがあったのだと思われる。
今回の対処方法については、おそらく以下の3種類。
- プロセスの終了/再起動(タスクの終了)
- Windowsの再起動
- Windows Updateの実行(オプションアップデートのインストール)
タスクの終了を試してみたところ、「変更済み」のメモリサイズが「3600MB→500MB」まで解放されていた。


対処法は問題を起こしているプロセス毎に違うと思われる。
一過性の不具合なら「プロセスの終了/再起動」→「Windowsの再起動」。
プログラムやドライバーに問題がありそうな場合は、それ自体の「アンインストール/再インストール/アップデート」が必要なケースも考えられる。


参考にしたマイクロソフトコミュニティのトピックによると、エクスプローラー(explorer.exe)が原因となることもあるようです。
Windowsはほんとに謎だらけです。
リソースモニター
- タスクマネージャーのパフォーマンスタブ下部のリンク
- 検索ボックスに「リソースモニター」を入力
- 「スタートメニュー」→「Windows管理ツール」→「リソースモニター」


リソースモニターで確認する場合は、内容を見やすい「メモリ」タブにアクセス。
「プライベート」と「コミット」のメモリサイズを確認する。
このプロセスで使用されているため別のプロセスでは利用できない物理メモリの量
プロセス用にオペレーティングシステムによって予約されている仮想メモリの量
Process Explorer
Microsoftが配布しているタスクマネージャーの高機能版的なツール群『Sysinternals』に含まれるプロセスユーティリティー『Process Explorer』も利用できる。


より詳細にプロセスのメモリ使用情報を得たい場合などに使えそうです。
あからさまに分かりやすいメモリリークを探す場合には特に必要ないと思います。
パフォーマンスモニター
奥の手となりそうな「パフォーマンスモニター」を使用したメモリリークの検出・特定方法。
判別するためには数時間掛かることもあるようで敷居が高い。
参考情報
まとめ
MoUsoCoreWorker.exeのコミットが異様に大きくなった理由は分かりませんが、プロセスの再起動後から3日くらいの間には再発していないので様子を見ています。
コミットサイズが異常に大きくなる同様の症状が再発しました。何が原因かは特定できていませんが、前回と共通する怪しそうな要素は下記2点。
- Windowsの再起動・シャットダウンを行わずスリープを繰り返しながら数日以上使用
- Windows Updateに『オプションの品質更新プログラム』がある状態
メモリの使用量は、パソコンの動作が遅い・重いって時くらいしか気にしていませんでした。
タスクマネージャーのメモリ構成も意識したことがなかったので、今後は少し気をつけて見ておこうと思います。