仮想メモリの話(Windows7向け) 2018-03-26/2018-12-17更新
書くことがない。
ので、PCの話をする。いきなりだが、仮想メモリについて話そうと思う。ただし、Windows7向けで、Windows10は将来的に新しいPCを入手出来たら話そうと思う。
仮想メモリの扱い方はしばしば白熱した議論が展開されることが多く、不要論から実装物理メモリx1.5倍論まで、検索するとかなりの量が出てくる。そのため、何の情報を信用したらいいか分からないというのが原状である。
そこで、同じ状況に陥りながら、試行を重ねた結果、(私にとっての)最適設定を導きだすことが出来た。1つの参考として、これから書くことを見ていくといい。
筆者の環境
PC Name: HP EliteBook 8440p
- CPU: Core i5-560M
- Memory: Nanya Technology 8GB(4GBx2)
- HDD: Seagate ST500LM000-SSHD-8GB 500GB (2.5inch)
仮想メモリを語るのであれば、ネットワーク他は不要であるので、主に関係するCPU、物理メモリ、HDDの3つの情報について載せておく。なお、Seagate製SSHDは密林ではぼったくり価格なのでせめてヤフオク!で探したほうが安く仕上がる。
実験1:仮想メモリ0MB(なし)の場合
まずは仮想メモリを0MBにして、様子を見ていた。これで3日間、スリープ・休止状態を含めて稼動しっぱなしで確認する。
本当はスクショで記録しておけば良かったのだが、その当時はこうして書くことを前提としていなかったのでそれがない。そのため文面のみの記載だが、リソースモニターで見ると、物理メモリの一部が”変更済み”にすっと占有されてしまい、最終的にメモリ不足に陥る現象が発生した。
知っている人は導入している、Empty.exeとRammap.exeの"Empty Modified Page List"を使用してこれの解消を試みたものの、効果はなく。なくなく再起動をしてこの状態を解消するハメとなった。
そこで得たものは、「仮想メモリがない場合は変更済みのHDDへの書き込みが不可能なために占有するのではないか」という仮説1個目と「長時間使わない場合は仮想メモリは0でも大丈夫ではないか」という仮説2個目である。
2個目に関して先に言っておくと、これは使用するソフトによるものなので一概には言えないが、それでも仮想メモリは用意しておいたほうがいい。これは後述する。次に仮説1個目を実証するため、次の実験を行った。
実験2:仮想メモリ8196MB(=8GB)の場合
次に仮想メモリを物理メモリの最大値である8196MBに設定して、同じように様子を見た。MB単位なのは設定がMB単位で行われるからである。
この設定直後は再起動する必要があるのだが、そのときに注意して欲しいことがあった。
起動するたびに、最初の3~5分程度はあるサービスにメモリを占有されるため、動きが極端に悪くなる。
サービス名はnetprofmで、これはネットワーク系に関する重要なサービスでもあるため、無効に出来ないサービスである。無効にするとネットワークへの接続が出来なくなる。そのため最初の数分は我慢して欲しい。
兎に角、問題はないので安心していい。それで本題に戻ると、これで現在1週間以上も連続稼動状態にしているが、変更済みメモリはリソースモニターで見ても全くない状態のままで、肥大化する様子も見られない。
また、Empty.exeを実行すると変更済みメモリが一気に発生するが、これをRammapの"Empty Modified Page List"を実行することで速やかに変更済み領域を0にすることが可能であることも確認出来た。そのときの画像が下の2つになる。
大抵の場合、1回の操作で全て書き込めないようで、2~3回行うと0になる。仮想メモリなしのときは何度実行しても全く減らなかった=書き込まれなかったため、「仮想メモリがない場合は変更済みのHDDへの書き込みが不可能なために占有するのではないか」という仮説はその通りで、逆に仮想メモリを実装しておけば、変更済み領域に占有されずに済むということが言えるわけである。
仮想メモリを実装するべきもう1つの理由
例えば、これを見ている人の中で、PCでゲームをする人は少なからずいるはずである。調べたところによると、PUBGとかいうゲームはどうやら16GBくらい使うらしい。興味ないから全く知らないのだが。
このときに物理メモリが足りなければ、最悪メモリ不足のエラーを吐いてゲームが強制終了なんて、笑えない話である。しかし、チップセットやソケットの関係で最大メモリが8GBという制約を食らっており(そもそもゲーム向きではない)、実装自体が不可能というケースもある。
その場合において、仮想メモリが活躍することになる。ゲーム前提で設定するのなら、実装の2倍あれば十分であろう。もっさりとか容量少なくなるとかはこの際気にしてはいられない。
これは極端な例であるが、ゲームをするでなくとも、office系の突然のフリーズに備えて仮想メモリを設定しておくことを推奨する。とはいえ、気休め程度でしかないが。
仮想メモリ設定時に守ってほしいこと
もし仮想メモリを設定する場合、次に言うことを守って設定してほしい。
- まずは全ての仮想メモリを無効にする。
- デフォルトではシステムのあるドライブに設定されているが、システム以外のドライブに設定する。
- 「自動的に管理する」にチェックが入っている場合はチェックをはずす。
- 「カスタム サイズ」にチェックをし、初期サイズと最大サイズを同じにする。
- (再起動要求をされたら)再起動して反映する。
以上のことを守って設定する。仮想メモリはページファイルとも呼ばれ、これの断片化を防ぐ目的でこのように設定する必要がある。断片化してしまうと読み込み速度に影響するため、気をつけること。
結論
ここまで仮想メモリに関して、仮説を元に実証、および考察を求めた。今回は以下のように結論付ける。
このようになるであろう。これは私が勝手に出した結論であるから、参考までにしておくといいだろう。同じようにやった時に成功する保証は出来ないからだ。
しかし、このようなヒントを与えておくことで、悩みの種が解決するのなら、それはそれで書いた意味があると素直に喜べる。PCの悩みが解決することを願っている。
それじゃあ、また。
道具箱
今回、記事内で紹介したツールのDLリンクを張っておく。
・Svchost Viewer
・Empty.exe(Windows Server 2003 Resource Kit Tools内に存在、WinRAR等の解凍ソフト必須)
Download Windows Server 2003 Resource Kit Tools from Official Microsoft Download Center
・Rammap.exe(Vista以降のOS限定)
https://technet.microsoft.com/ja-jp/sysinternals/rammap.aspx
ちなみに、今日の気持ち
ベビースターラーメンを1日1袋食べたい。365個欲しい。
更新: 2018-12-17
新版ができたのでこっちも参考になるはず。
linkskibe.hatenablog.com
更新2: 2019-11-07
旧はてなブログへ来た人へ:ブログ本体はリンクス岐部の自由になろう!ブログに移転している。こちらでも同じ記事を最新版として書いているのでこちらにも来て欲しい。