メモリが解放されない?

Anonymous
2013-10-15T16:34:20+00:00

Windows 8に固有の問題かどうかは分かりませんが、教えてください。

基本的にスリープや休止状態を使いシャットダウンはなるべくしないようにして使っているのですが、そうやって何日も使っているとアプリケーションが起動できなくなったり、起動してもダイアログやメニュが正しく表示されなくなったりして困っています。

そういうときにタスクマネージャで見てみると、メモリタブのメモリのコミット済みが異常に大きい値になっています。メモリが足りなくなっているのが、アプリケーションが起動できなくなっている理由ではないかと考えています。Windowsを再起動した直後は、こんなにコミット済みメモリは多くないです。せいぜい2.xGBか3.xGB程度なのですが、数日経過するとウィンドウアプリをすべて閉じてもコミット済みは7.4/8.6GBとかになっています。

もう少し調べてみると、どうも taskhostex.exe と explorer.exeの2つのプロセスがかなりのメモリを「コミット済み」にしていることが分かりました。試しにtaskhostex.exeをタスクマネージャから強制終了するとコミット済みメモリが2~3GBほど、explorerを強制終了すると1~1.5GBほど減ります。これらのプロセスが、メモリを大量に消費しているか、もしかしてメモリを解放しないままになっているのでしょうか?強制終了ではなく、これらのプロセスが使用するメモリ量を制限するか、安全に解放させる方法はありませんか?

また、ProcessExplorerを使用してtaskhostex.exeが提供しているタスクを調べてみると、Microsoft PlaySoundService Class/MsCtfMonitor Task handler/Wininet Cache task objectの3つの機能を提供しているようですが、このいずれかに問題があるのでしょうか?

ちなみにWindows ストアアプリは、まったく使用していません。使っているのは普通のデスクトップアプリばかりです。

この現象はメーカの違う2つのPCで確認しているので、固有の問題というわけではないと考えています。何か原因をご存知でしたら、教えていただきたいと思います。

よろしくお願いします。

(追記)

2台のPCで確認していますが、一方はWindows 8 64bitで、もう一方はWindows 8 Pro 64bitです。

搭載メモリはどちらも8GBです。

よろしくお願いします。

家庭向け Windows | 以前の Windows バージョン | パフォーマンスとシステムの失敗

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

61 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2014-03-07T22:07:56+00:00

    返信ありがとうございます。

    少し忙しくて間が開いてしまいました。

    rammapで試してみましたので結果を貼り付けます。

    結論から言うと、表示される値から有意義な情報は得られませんでした。

    まずこれがWindows再起動直後です。

    数日Flashbuilderで開発、Webで調べ物等々を行い、ここまで増えました。

    explorerを再起動しました。

    コミット済みが大きく減っているのですが、リソースモニタのコミット値は100MBも変わっていません。

    rammapのPage Tableに関しては3MBも変わっていません。

    メモリ監視ツールでは見えない部分かつ、explorerに関連づいたコミット済みというものが溜まっていく、という現象ですね。

    これは今まで出てきた情報と違いがありません。

    ただ、私の環境ではexplorerの減り分から鑑みるに、taskhostexのコミット済みの増加量がそこまで多くないように思います。

    おそらく増加分の約4GBの内、ウイルスバスターとパスワードマネージャで半分以上を占めているのではないかと推測します。

    また、更に推測ですが、物理メモリが足りなくなってスワップが多く発生すると加速度的にコミット済みの値が増えていくように思いました。

    ずっとオンメモリでスワップし続けるexplorerがスワップした仮想メモリを開放していない、と考えるのが妥当ではないか、という推論が現実味を増してきたように思います。

    その推論を裏付ける情報が取れないのでなんとも言えませんが・・・。

    更に調べてみたいと思います。

    それから、ここはマイクロソフトのサポートではありませんが、マイクロソフトのドメインでホストされているコミュニティですので、マイクロソフトが何らかの調査を行ってくれたら嬉しいなぁ、と思う次第です。

    また何かありましたらご報告させていただきます。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2014-02-28T00:51:20+00:00

    鈴菜萌さん、情報提供ありがとうございます。

    タスクマネージャのコミットサイズはこちらでも確認しています。

    が、数値的には大した大きさではなく、何GBも消費しているようには見えなかったので、「タスクマネージャの数値は当てにならない」か「タスクマネージャで表示される以外のコミットメモリが増えている」と考えていました。

    もしよろしければ、rammapというユーティリティを試してもらえませんか?

    これはsysinternalsのツールの一つなので怪しいものではないようです。

    私が気づいたことの一つに、「コミット済みメモリを消費(浪費?)しているプロセスは、’Page Table’のサイズが大きくなっている傾向がある」ということがあります。

    rammapを起動して[Processes]タブを開くと、'Page Table'という列があります。私のPC(Windows8.1)では、コミット済みメモリが増えてきた時にこの'Page Table'を降順に並べ替えると、必ずと言っていいほどexplorer.exeとtaskhostex.exeが上位に来ています。他のプロセスと較べても、飛び抜けて大きい数値を示しています(といっても、4000~8000K程度ですが)。

    このとき、そのプロセスを強制的に殺すと、コミット済みメモリが劇的に下がります。ただし、taskhostex.exeをkillするとシステムの動作に大きな影響があるので、リブートせざるを得なくなりますのでご注意下さい。

    参考までのスクリーンショットを添付します。まずは、explorer.exeを殺す前です。

    次に、explorer.exeを殺した後です。

    この’Page Table’列で表示されている数値の具体的な意味はわからないのですが、少なくともOS起動後はexplorer.exeもtaskhostex.exeもこのPage Tableはそんなに大きな数値ではないです。使い込んでくるうちに、コミット済みメモリが上がるのと同期して増えているのは間違いないです。

    また、Page Tableという名前から考えて、仮想メモリの割り当てに関係する数値であることも間違いないでしょう。推測するに、OSがあるプロセスに対して仮想メモリ領域(=コミット済みメモリ)として与えるけれど、そのプロセス自体はそのメモリを使用していない、つまりプロセス自体のワーキングセットが大きくなるわけではない、と考えています。言い換えると、「OSは、プロセスが必要としないメモリ領域を無駄に割り当てている」という感じでしょうか。

    もしこの推測が正しいのであれば、何らかのプロセスが単純なメモリリークを起こしているのではなく(=ワーキングセットが大きくならない点からもそうだと思われる)、OS自体に何らかの問題があると考えるのがもっともらしいと考えられないでしょうか。実際、このコミット済みメモリを増やしているプロセスは特定のプロセスだけに起こるのではなく、少なくともexplorer.exeとtaskhostex.exeの2つは大量にコミット済みを増やしていますし、おそらくはその他のプロセスも少量ながらそういう現象を起こしているのだと思います。だからこそ、すべてのプロセス分を合算することで、タスクマネージャの「メモリ使用量」<<「コミット済み」とその差が大きく解離するのだと考えています。

    長文ですみません。

    ここはマイクロソフトのサポートサイトではないので、マイクロソフトには伝わらないのでしょうが、かと言って個人的に直接報告したところで、「PC固有の問題」とか「環境のせい」とかで無視されるのがオチでしょう。しかし、少なくともこのコミュニティサイトで私を含め3人の方が同様の症状を訴えておりますし、また私が使用する3台のPCで同じ症状がありますから、やはり固有の問題ではないと思います。同様の症状の人の声を集めて、マイクロソフトに対して何らかの働きかけの一助になればと思い、いろいろと情報を書いています。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2014-02-05T02:22:59+00:00

    質問主です。

    parsakunさん、早々にお返事をいただいておりながら、返答が遅くなりすみません。

    KB2870467のメモリリークの件、少し時間をかけてみていました。

    やはり、parsakunさんがおっしゃるようにコミット済みメモリは増えてきています。KB2870467を見て「コレだ!」と思ったのですが、ぬか喜びだったようです。残念・・・。

    それにしてもおかしな現象だと思います。

    特定のプロセスがメモリリークを起こしているのであれば、そのプロセスのプライベートワーキングセットが大きくなったりするなど、タスクマネージャやrammapツールで確認ができるはずですが、そういうことはないです。今回、問題のexplorer.exeやtaskhostex.exeは多少メモリ使用量が多いかな~という印象は持ちますが、何GBも使っているようには見えないですし。でも、この2つのプロセスを殺すと、コミット済みメモリがかなり減るのは確かです。

    単純なメモリリークではないのかもしれません。Windowsシステム奥深くに潜む「何か」があるような気がします。日本ではこのような症例をあまり聞かないので、その「何か」を目覚めさせるトリガーに触れてしまっているのだと思うのですが、それが分からない状況です。

    継続して、別の角度からも検証してみます。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2014-01-25T05:18:10+00:00

    メモリーリークの件は私もかなり気になっていることなので、

    こちらの質問は今もチェックさせて頂いてます。

    KB2870467

    http://support.microsoft.com/kb/2870467

    上記の更新プログラムはWindows8.1だと「KB2911106」ですが、Windows8だと「KB2889784」のようです。

    私はWindows8のまま使っているのですが、インストールされた更新プログラムにKB2889784が既に入っていました。

    (インストール日:2013/12/12)

    KB2870467の修正プログラムが適用された状態で、コミット済みが増加し続ける現象が発生しているので、Windows8についてはKB2870467が要因のようではないようです。

    更新プログラムで改善する可能性もありそうなので、今後も内容を注意してみていこうと思います。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  5. Anonymous
    2014-01-17T00:30:02+00:00

    情報ありがとうございます。現在は、調べる方法がない状態ですので、どんな些細な情報でもありがたいです。

    頂いた情報をキーワードにして調べてみると、海外では少し話題になっていますね>Realtekのドライバの問題。

    真偽のほどは分かりませんでしたが、「非ページプール」の値が大きくなるというのが、Realtekドライバのメモリリークの兆候のようですね。

    私の使っているPC2台はともにRealtekのGigabitEtherを持っていますが、該当しないようです。「コミット済み」が増えても、「非ページプール」は増えていないです。だいたい100~150MByteの範囲で収まっていて、特に問題はなさそうです。

    それに、私のところでは「Explorerやtaskhostexプロセスを強制終了させると、コミット済みメモリが解放される」という現象がありますので、これらのユーザーモードプロセスの解放したら、カーネルモードドライバの非ページプールも解放される、というのは少し考えにくいです(ありえない話でもないのですが、ちょっと遠い感じ)。

    でも、ダメ元でドライバのバージョンを確認&変更と、レジストリの調整は試してみようかと思います。

    それから、AMD VGAドライバというのは、今回は無さそうです。Intel CPUの内蔵グラフィックスを使ってますので。

    とにかく、情報ありがとうございます。何か進展があれば、何らかの形で報告したいと思っています。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません