Windows10でメモリを最大まで使えない問題に関するメモ
こんばんは…と思ったらもうお昼だ! こんにちは、しののめです。
前々から書いてる通り自作機のメモリ周りがおかしすぎて半年近く頭を悩まされていたんですが…検証の結果私が勘違いしていただけで別におかしくなかったことが判明しました。
で、終わろうと思ったんですが、サジェストに「Windows10 メモリ 使い切らない」が出てくる辺り似たような現象で悩んでいる方がいそうなので、ヒントになればと書き残して置きたいと思います。
2/12 冗長すぎたため全体的に修正しました
トラブルの概要
前提として、PCには8GB×2枚の16GBメモリを搭載しています。BIOSでもOSでも間違いなく認識されていてメモリ診断でのエラーもなく、2回買い替えているのでたぶん不良はありません。
以前同じ色のスロットに挿しているにも関わらずCPU-Zで見るとチャネルのところが空白で、デュアルチャネルになっていない!と書いたんですが、HWiNFOという別のソフトではちゃんとなってました。そもそもなっていない場合はSingleと出るみたいなので、これは単にソフト側との相性だったのかもしれません。私を悩ませていたのは別の問題です。

ベントビューアーに記録された「リソース消費診断イベント」の詳細の一部です。注目すべきは「PhysicalMemorySize(物理メモリ搭載量)」と「PhysicalMemoryUsage(物理メモリ使用量)」の部分。7GB以上空きがあるのにメモリが足りなくなっています。これが大量に出ていました。

(活動時間がおかしいのは気にしないでください)

どのログを開いてもエラー時の物理メモリ使用量は8.5~9.9GB辺り。10GB以上使ってることはありません。16GB積んでるのになぜだ!…というのが今回の問題です。
エラー記録時の挙動
最初はハード側を疑っていたんですが、メモリを交換しても変わらない辺りOS側が怪しいのかなぁと、ひとまず挙動を確認してみました。メモリを多めに使うソフトを多重起動させた状態で、Chromeで重めのサイトを約60タブ開きます。

正常に動作するのはこの辺りまで。これ以上開こうとすると一部のタブがクラッシュしてしまいます。この状態ではリソース消費診断イベントのエラーは記録されていません。
Photoshopでかなり重いファイルを開いたところ、 エラーのダイアログが出てPhotoshopとChromeが落ちてしまいました。例のイベントログが記録されていたので見てみます。

やっぱり物理メモリ使用量は9.5GB止まりですね…。ここで気になったのは赤で囲った「SystemCommit~」の部分。今まで物理メモリの使用量ばかり気にして見ていなかったんですが、こちらはリミットに近い値が出ています。
リソースモニターのメモリ欄にも「コミット」がありました。それによると

とのこと。私は仮想メモリを推奨の値である3GB弱しか設定していません(SSDしか積んでいないので本当は無効にしたいんですが、動かないソフトがあったため泣く泣く設定)。でもこの画面で見るとPhotoshopが3GB以上予約している…。
調べたところ、そのプロセスで使うため予約している物理メモリと仮想メモリの合計が表示されているみたいです。タスクマネージャーのコミット済みがこの合計に当たるわけですね。

そしてメモリ不足に陥る際、必ずこのコミット済みが限界ギリギリまで使われていることがわかりました。つまりメモリ上には その時使っている物理メモリの空きだけでなく、コミット分の余裕が必要 らしい…?
本当にそうなのか実験
この仮説が正しければ、コミットする量が少なく、純粋に物理メモリだけを使ってくれるソフトなら9.5GB以上のメモリを使えるはず。しかし中々条件に合うソフトが見つかりません。そんな中ひとつだけ見つけました。
超軽量でなめらかな描き味が人気のお絵かきソフトSAI2です。
このソフトはとても軽く、普段のメモリ使用量は100MB程度なのですが…

2000x3000pixelほどのキャンバスを開いて解像度を2000倍に拡大すると上のようになりました。縦6000000pixelとかアホみたいな数字なので当然メモリエラーの表示が出て失敗するんですが、グラフを見ていただけるとわかるとおり利用可能な物理メモリ15.9GBギリギリまで使用できていました!

イベントログも同様。やっぱりメモリは正常だったみたいです。よかった…。
結論
以上の結果からわかったのは、メモリ不足エラーが出たりソフトがクラッシュするのは物理メモリが不足している場合に限らないってことですね。物理メモリにどれだけ空きがあろうとも、コミットが限界に達するとそれ以上物理メモリを消費できなくなります。利用可能は当てにならなかった…。
どのソフトがどのくらいコミットしているかはタスクマネージャーの「詳細」タブや「パフォーマンス」タブから開けるリソースモニターでわかります。

上はこの記事を書いている現在コミットが多い順にソートしたものです。

Photoshopだけで3.1GB使ってるのもあって、 すでにコミット済みが使用中より4.6GBも多いです。コミットできる最大値はコミット済みの右側に表示されている18.8GB(物理メモリ+仮想メモリの合計です)なので、実際に使えるのは10.9GBではなく9.3GBということになります。ちなみに、他に起動しているのはChrome(1タブ)、イベントビューアー、リソースモニター、タスクマネージャー、エクスプローラーのみ。この程度でも物理メモリが8GBだと不足する模様…。
それじゃあ物理メモリは限界まで使えないのか? という話ですが、そんなことはありません。このPCを組む前メインで使ってたノートPCやDeskminiA300は一度もリソース消費診断イベントが出ておらず、16GBギリギリまでメモリを使えています。搭載メモリ量は同じなのになぜ? やっぱりこのPC特有の問題なのか…? と、再び頭を悩ませつつメインノートでも同じような検証していたら気になる点を発見。

メインノートのタスクマネージャーです。赤線の上と下で見比べてほしいのはコミット済みの最大値です。増えてますね。
仮想メモリ(ページファイル)がデフォルトの「システムの管理サイズ」になっていると、このように必要に応じて増えていくようです。最終的には物理メモリの4倍くらいになるそうで…でもソフトを閉じていくとちゃんと最低値まで戻ります。

メイン機は仮想メモリを2.9GBほどに固定しているため増えることはありません。しかし思い出してください、Photoshopだけで3.1GBコミットしていました。

この超越した分は(たぶん)物理メモリから使われます。しかし本来は仮想メモリが使われるはずのものです。しかも「予約」しているだけ。だから物理メモリの使用量にはカウントされず、9.5GB辺りですべて使い切ってエラーが出ていた…という感じでしょうか。

そう考えるとこの「仮想メモリの不足を~」エラーにも合点がいきます。
最後の検証
上の仮説が正しいのか確かめるため、メイン機の仮想メモリを「システムの管理サイズ」に設定してみます。

仮想メモリの設定はスタートを右クリックして「システム」を選択→右側にある関連項目から「システム情報」を開き、左の一番下「システムの詳細設定」を開いて「詳細設定」タブ→「パフォーマンス」内の「設定」→「詳細設定」タブ→「仮想メモリ」の「設定」から変更できます。ややこしいですよね…。
ドライブはどこでも大丈夫だと思います。SSDは書き込むたびに寿命が減っていく仕様上、HDDがあるならそれを選択したほうがいいかも。私は全てSSDなので総書き込み量の多いDドライブを選択しました。システムの管理サイズに変えたあとは必ず設定ボタンを押してからOKを押します。
再起動するまで設定が保存されないため、用意ができたら再起動しましょう。さてさて私のメイン機はどうなったのか。

ご覧の通りです。9.5GB以上の物理メモリを使用できるようになってました! Chrome200タブくらい開いてますがクラッシュせず、リソース消費診断イベントも記録されていません。やっぱりおまえのせいだったのか…!
SSDが標準になった今、寿命延長のために仮想メモリは無効にしよう~と推奨している記事がたくさん出てきますし、16GBあれば余裕だろうと思っていました。それがまさかこんなことになるなんて…いやいやびっくりですね。
原因がわかってスッキリした反面、この仕様はどうなのかなぁとも思います。というか一部ソフトのコミット分が多すぎる気が…上のは意図的にやったものだとしても物理メモリ分を引いて13.3GBほど。短時間でそれだけSSDに書き込まれた、と考えるとやっぱりちょっと恐ろしいです。
とはいえ、考え方を変えればコミット分以上の物理メモリがあれば仮想メモリ無効でも大丈夫ってことですよね。使うソフトやその使い方にもよると思いますが、私の場合は大体物理メモリ使用量×2=コミット最大値のようでした。 つまり32GB積んでおけばSSDの寿命を削らずに済むと。
…あれ? でも前に32GBにしたとき10GB超えた辺りで落ちたんですが…まぁそれはまた別の問題ですね。ずっと悩んでいたメモリを最大まで使ってくれない問題の原因と対策はわかったので、今回はこれにて終わります! 同じような問題で悩んでいる方は仮想メモリの設定を確認してみるといいかもしれません。
それでは、長々とお付き合いありがとうございました。
ディスカッション
コメント一覧
素晴らしいです!仮想メモリを無効化したら64GBMAXまで使えるようになりました!ありがとうございました!
わかりやすくまとめていただき、ありがとうございますm(_ _)m
メモリを半分使ったところで誤作動が起こり、ずっとなんでだろう?と思いながらも何となくそのままにしてしまっていましたが、本記事のおかげで解決いたしました!
しかしながら、Windowsの仕様って詰めが甘いというか、何なんでしょう?
「コミット済みメモリがオーバーしました」などのメッセージを出すことはできないのでしょうかね…。
このせいで、大枚はたいて載せたメモリが無駄になっていたかと思うと悲しくなります。。
無駄愚痴失礼いたしました。
改めまして、有意義な情報に感謝いたします!
>yuuuさん、たかさん
コメントありがとうございます、気づくのが遅れて大変申し訳ありません…!
お役に立てたようでよかったです。
ネットやSNS見るくらいならメモリ不足に陥ることってほとんどないと思うんですけど、私のように専門職でしたりゲームする方の場合結構陥りやすい問題な気がします。
仕様を変えるのは難しいとしても、この説明ではどうしてエラーが出ているのかわからないので、もう少しわかりやすい説明文にしてもらえたら嬉しいですよね。