「カーネルは常にメインメモリに置く」とメモリリークする?
【いじくるつくーる】という Windows の各種設定を変更するソフトを10年ぐらい前から使い続けていますけど、設定変更するのに非常に便利で、OS をリカバリした後とかは真っ先にこのソフトをインストールして設定をカスタマイズするのが半ば習慣になっています。
その設定項目に「Windows NT系」→「Windows NT系設定」にある「カーネルは常にメインメモリに置く」という項目があり、この項目をチェックすると、以下のレジストリの値が"1"になります。
- HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Memory Management\DisablePagingExecutive
自分の PC はメモリを 8GB も積んでいるので、カーネルを常に物理メモリに置いても問題ないと思っていました。
しかし、Windows 8 でこのレジストリの値を"1"にして PC を再起動した後、スリープ・再開を繰り返しながら使い続けていると、いつの間にか物理メモリの空き容量が少なくなっていることに気付いた。
未だ確証は得ていないが、カーネルを常に物理メモリに置くと、カーネルの行儀が悪いのかメモリリークしているように見える。
何かがメモリリークしているのはおそらく事実で、それが今回の設定変更に因るものかは未だ分からないけど、このレジストリ値は Windows 7 以降の PC だとデフォルトでは"0"になっているので、下手に"1"にしない方が良いかもしれない。
「カーネルは常にメインメモリに置く」の ON(1)/OFF(0) を切り替えて観察してみたが、OFF(0) にしてもメモリリーク問題は解決しませんでした。
どうやらこのオプションはメモリリークには関係無さそうなので、上の記事は取消線を引いておきます。
今、疑わしいのは以下の二つ。
- Windows Explorer *1
- Mozilla Firefox
Explorer は、開いたファイルをメモリにキャッシュしているっぽくて、ある時、プロセスを再起動してみたら、メモリ空き容量が 1GB 以上増えました。
Firefox は、プロセスを停止しても 200MB ぐらいメモリが残ってしまうように見えます。
何がメモリリークの原因なのか、もう少し調べるつもりです。
だらだらと観察し続けたが、ようやくメモリリークの発生源が見えてきました。
Firefox のメモリキャッシュが原因のようです。
以下の手順でメモリキャッシュを OFF にして Firefox を終了しても、目立ったメモリリークは起きないようになりました。
- アドレス欄に about:config と入力する。
- 「細心の注意を払って使用する」ボタンを押す。
- 「検索」欄に browser.cache.memory.enable と入力する。
- 「browser.cache.memory.enable」エントリをダブルクリックして、設定値を false に切り替える。
ちなみに自分は以下のアドオンを入れていましたけど、、
このアドオンを有効にしていると、Firefox の起動時に「browser.cache.memory.enable」エントリ値が true になってしまうので、アドオンを無効化しました。
真の原因は Firefox のメモリキャッシュなのか、それとも Fasterfox Lite アドオンなのか分からないが、とりあえず問題が解決しつつあって良かったです。
前回の追記から更に1年以上経ってしまいましたけど、主な原因が分かってきました。
以下の2つが関与しているようです。
前者は、プロセスを再起動すればメモリが解放されるのでメモリリークとは言い難いんですけど、大半のユーザーはタスクマネージャーなんか見ないだろうし Explorer の再起動もしないだろうから、いつの間にかメモリ使用量が増えていく要因になります。
後者は、長時間の動画を視聴するとメモリ使用量が増えるみたいで、しかも Firefox を終了した後に解放されるメモリはどうやらタスクマネージャーで把握できる分だけで、当該プラグインが確保したメモリは解放されていないように見えます。
この問題に対する完璧な解決方法は未だ分かっていませんが、Firemin というソフトウェアを事前に起動させておくと、Firefox および関連プラグインのメモリ使用量の上昇を抑えることができる所までは分かってきました。
まあ、メモリリークが起きて空きメモリがなくなっても PC を再起動すれば問題はひとまず回避できるし、Windows Update とかで月に1回は PC を再起動しなければならないので、根本的な解決を求めなくても良いかなと思っています。
おまけ:
Wireshark でネットワークトラフィックを監視していて気付いたんですけど、Dropbox は外部とのやり取りが多過ぎます。
メモリリークの要因ではないと思いますが、最近は殆ど使わなくなったのでアンインストールしました。
参考記事:
- カーネルを常にメインメモリに置きたい:窓のTIPS備忘録blog
- 無料でFirefoxのメモリリークを一発であっという間に除去する「Firemin」 - GIGAZINE
- why does Windows 7 x64 Explorer.exe suddenly gobble up all available RAM and slow my system to a crawl? - Super User
- http://answers.microsoft.com/en-us/windows/forum/windows_7-performance/memory-leak-in-explorerexe/94abd6b5-e7c1-4832-b9f4-32eae6ed0270
- https://www.liberiangeek.net/2012/11/enable-disable-offline-files-in-windows-8/
*1:Internet Explorer ではない。