質問

メモリが解放されない?

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です。
よろしくお願いします。


* 小さ目のページ番号でお試しください。

* 番号のみをご入力ください。

* 小さ目のページ番号でお試しください。

* 番号のみをご入力ください。

murano さん、こんにちは。
マイクロソフト コミュニティへの投稿ありがとうございます。

シャットダウンをせずに PC を長時間使っているとパフォーマンスが悪化し、プログラムを終了してもメモリが解放されないような状況なのですね。

過去に同じような症状で「こちらのスレッド」があったのですが、このときは Windows 8 に対応していないセキュリティ ソフトが原因のようでした。

常駐プログラムなどの影響かどうかを切り分けるために PC を「クリーン ブート」起動した場合の動作を確認してみてはいかがでしょう。

ただ、「何日か使っていると」ということで、なかなか繰り返しの検証などは難しいかもしれませんね。。。

他に有効な対処や切り分けの方法をご存知の方がいらっしゃいましたら、ぜひ書き込みをお待ちしています。
近藤 茂 - Microsoft Support

この回答で問題は解決しましたか?

役に立ちませんでした。


近藤さん、アドバイスありがとうございます。

紹介いただいた類似のスレッドは、おそらく私と同じ症状だと思います。
しかし、私の方では外部のセキュリティソフトが入れておらず、Windows Defenderのままです。

taskhostex.exeを終了させるとメモリが大量に解放されることから、Windowsの必須コンポーネントのどれかがメモリを返さないのだと考えているのですが、もしかすると後からインストールされた何かのサービスや常駐物が問題を引き起こしているのかもしれませんね。taskhostexe.exeが提供しているサービスと関係しているものにどういうものがあるのかだけを教えていただくことはできませんか?もしできたら、予め問題箇所を絞り込めるのですが。

幸い2台で同じ症状が見られることから、この2台に共通してインストールしている「何か」が悪影響をしているのかもしれませんので、一方のPCを使って教えていただいた「クリーンブート」で少しずつサービスを切ったりして問題を絞り込んでいきたい思います。
症状が出るまでに数日経たないと分からないので、結果が分かるまでしばらくかかりますが、何かわかったら結果報告したいと思います。

この回答で問題は解決しましたか?

役に立ちませんでした。


質問者です。

教えていただいたクリーンブートを試してみました。
2台で同じ症状が出ているので、両方に共通して入れているアプリケーションやサービスに原因があるのではないかと考えて、それらのサービスを無効にしてみたり、スタートアップ項目から外してみたり、また共に使っているRAMディスクをアンインストールしてみたりと、いろいろしてみたのですが、やはり現象は出ます。
先ほども、コミット済みのメモリが9.2GBまで上がってきたので、これを下げるべく、リソースモニターを開いて2つ起動しているexplorer.exeプロセスのうち、ワーキングセットサイズの大きい方だけを「プロセスの終了」してみました。すると、コミット済みメモリが4.2GBも減って、5.0GBにまで落ちました。
やはり、explorer.exeに問題があるのではないでしょうか?メモリを使うだけ使って、解放しないとか。

究極的には、OSをインストールしなおして何も追加インストールしない状態で1週間とか使ってみればOS自体の問題かどうかの切り分けはできそうですが、何も入っていないPCを1週間も使えませんし、仕事にも差し支えます。

explorer.exeの問題と書きましたが、もう少し問題箇所を絞る方法はないのでしょうか?例えば、シェルエクステンションに問題があってメモリを食いつぶしていると仮定するなら、特定の(あるいは全部の)シェルエクステンションを読み込まないで起動するオプションがあるとかの方法です。

以上、よろしくお願いいたします。

この回答で問題は解決しましたか?

役に立ちませんでした。


murano さん、こんにちは。
explorer.exe の終了でメモリが解放されるのですね。

書かれているようにシェル拡張機能などが影響している可能性がありそうですね。
さらに原因を絞り込む方法ですが、「Autoruns for Windows」を使ってみてはいかがでしょう。

「Explorer」タブから読み込むシェル拡張を選択したりなど、クリーン ブートよりもさらに細かい制御が可能なツールです。

@IT - Sysinternalsのautorunsツールで自動起動するプログラムを調査する

よければ確認してみてくださいね。

近藤 茂 - Microsoft Support

この回答で問題は解決しましたか?

役に立ちませんでした。


私の場合は、Classic Shellを最新版に更新すると改善しました。

 

私もWindows 8 64bit・メモリ32GBの環境で、再起動せず1週間くらい使っていると、メモリ不足の警告メッセージが表示されて困っていました。

 

タスクマネージャーで確認すると、使用可能は10GBくらい空いているのに、コミット済みが31GBほどとほぼ使いきっている状態になっていました。

 

アプリをすべて終了しても、使用可能メモリは増えるのですが、コミット済みの値は減りませんでした。

 

「シェル拡張機能などが影響している可能性」という回答内容があったので、Classic Shellを最新版にアップデートしたところ、コミット済みが増え続けることが無くなったように思います。

今までアップデートせずに古いものを使い続けていたのですが、メモリ関連のバグも修正されていたのかもしれません。

(Classic Shellのバージョン:3.6.3 -> 4.0.2)

 

私の場合は、Classic Shellというスタートメニュー表示やエクスプローラ拡張ソフトでしたが、常駐系のソフトなどはメモリ解放バグがあると長時間の使用時に影響があるのかもしれませんね。

この回答で問題は解決しましたか?

役に立ちませんでした。

この回答は 2 人の役に立ちました


parsakunさん、アドバイスありがとうございます。

 

残念ながら私はClassic Shellを使っておりませんので、該当しないようです。しかし、見えている現象面では同じように思われます。

 

なんとなくですが、最近はWEBブラウザが悪さをしているのではないかと感じています。通常は、Chrome系ブラウザ(実際は、Iron)を使っているのですが、何時間かいろいろ調べ物をしてふとメモリ使用量を見てみると、問題の「コミット済み」の値が跳ね上がっているような気がします。もちろん、この状態でブラウザをすべて終了させても、コミット済みは多少減る程度で完全には下がりません。

 

しばらくは、出来る限りIEなどの別のWEBブラウザを使ってみて、状況に変化がでるかどうかを確認してみたいと考えています。

 

> 私の場合は、Classic Shellというスタートメニュー表示やエクスプローラ拡張ソフトでしたが、常駐系のソフトなどはメモリ解放バグがあると長時間の使用時に影響があるのかもしれませんね。

 

そうですね。

特定のプロセスに起因するメモリリークなどであれば、タスクマネージャなどで特定できるのですが、タスクマネージャの「コミット済み」に表示されるものの内訳までは分かりませんから、困っています。

 

いずれにせよ、情報をありがとうございました。引き続き、何かありましたらよろしくお願いいたします。

 

この回答で問題は解決しましたか?

役に立ちませんでした。


すみません、ClassicShellをアップデートして改善したと思っていましたが、どうやら勘違いだったようです。

やはり何日も再起動しないで使用し続けると、コミット済みがどんどん溜まっていき、メモリ使用可能領域は空いているのに警告が表示されてしまいます。

色々と試してはいるのですが、なかなか原因が特定できません。
私も、ブラウザーが怪しい感じがしています。
連休などPCをつけっぱなしで何日も使用したときに発生しており、そのときの状況を考えると、ブラウザーで様々なサイトを閲覧しているときに溜まっているような気がします。(メインはFirefoxとChromeを使用)

WIndows7のときはこんな現象は発生しなかったので何とか改善方法があればと思っているのですが・・・。
ファイルサーバーとして何ヶ月もつけっぱなしのWindows8はコミット済みが増加していくことはないので、やはり何らかのアプリがメモリーリークしているのでしょうね。

この回答で問題は解決しましたか?

役に立ちませんでした。


たびたびの情報ありがとうございます。

 

そうですか、直らなかったのは残念ですね。

最近はWEBページの更新作業のため、Chrome(Iron)を頻繁に使っているのですが、なんとなくコミット済みメモリの値が上がるのが速いような気がします。

これまでは1週間位経ってみると上がっていることが多かったのですが、この作業をしているとたった1日でコミット済み=7.xGBとかになっていることがあります。

 

一方、ここ数日はできるだけIE10の方を使うようにしているのですが、そうすると(やはり「なんとなく」ですが)、数値の上がり方が緩やかな気がします。

 

これが本当なら、Chrome系ブラウザとWin8との相性が悪い、ということになるのでしょうが、やはり不思議なことに、Chromeのプロセスを全部終了してもメモリがほとんど開放されず、Explorerとtaskhostexを終了するとコミット済みメモリが一気に減ります。

私の想像では、Windowsは内部でhttpアクセスの内容をキャッシュしていて、それが溜まってきているのではないかと思っています。そして、何故かそれが解放されないと。実際、taskhostexが提供しているサービスの一つにWininet Cache task objectというのがあるようですので、ブラウザを使用し続けることで数値が上がるのであれば話が繋がってくると感じています。

そうなると、問題はWin8自体かな、、、とも。

 

> ファイルサーバーとして何ヶ月もつけっぱなしのWindows8はコミット済みが増加していくことはないので

 

単なるファイルサーバーなら、そのサーバーからWEBブラウジングはしないでしょうから、その点でもやはり、ブラウザとの因果関係が疑われますね。

 

いずれにしても、まだまだ様子見状態が続きそうです。

 

この回答で問題は解決しましたか?

役に立ちませんでした。

この回答は 1 人の役に立ちました


返信 削除されたメッセージへの返信において

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

 

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

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

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

 

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

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

 

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

 

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

 

この回答で問題は解決しましたか?

役に立ちませんでした。


質問者です。その後の調査内容です。

どうもWindows自体の問題のような気がしています。やはり、メモリリークの可能性が高いと思いますが、海外ではゾンビプロセスの存在を示す情報もあります。

メモリリークの方は、KB2870467でoleaut32.dllにメモリリークの問題があるとされています。Windows Updateでは「オプションの更新プログラム」の方に入っていて必須ではないので気が付きませんでしが、KB2911106をインストールすると、このKB2870467のメモリリークが解消されるようです。
本日これをインストールして半日ほど使っていますが、コミット済みメモリは増えていないような気がします。まだ、連続稼働時間が少ないのでなんとも断言はできないですが、その他の現象も総合すると可能性は高いと考えています。少なくともexplorerがこの問題のoleaut32.dllをロードすることはわかっていますし、このdllのメモリリーク問題であれば、explorerをkillすることでメモリが一気に解放される事実とも合致します。このdllを直接的or間接的にロードするプロセスは他にも存在しますから、それらでも少しずつはメモリリークが起きていたのでしょうが、なぜexplorerが大量にメモリリークを起こしていたのか不明です。

一方、ゾンビプロセスが発生していることも確認しています。rammapというツールを使うと、より細かいメモリの使用状況を把握できますが、アプリケーションを終了したときにタスクマネージャのプロセス一覧からは消えるけれど、rammapのプロセスリストには残っている場合があります。そのようなゾンビプロセスはTotalメモリサイズが20KByteだけ残って再起動以外には消せなくなるようです。
こちらの方は、今回の現象とは直接関係がないと考えています。20KByte程度のゾンビプロセスが残って数GByteものコミット済みメモリになるとは考えにくいですし、explorerを強制終了したからといったゾンビプロセスも同時に無くなってメモリが解放されるわけではないからです。

というわけで、KB2911106を適用してしばらく様子を見ます。

parsakunさん、もうここは見ていないかもしれませんが、もしご覧になっていましたらこのfixを適用してみて、現象が改善されるかどうか、情報を共有しませんか?


この回答で問題は解決しましたか?

役に立ちませんでした。

この回答は 23 人の役に立ちました


* 小さ目のページ番号でお試しください。

* 番号のみをご入力ください。

* 小さ目のページ番号でお試しください。

* 番号のみをご入力ください。

 
質問情報

表示回数: 55,443 最終更新日: 2018年7月14日 適用先: