2015-08-07 04:17:19 +0000 2015-08-07 04:17:19 +0000
82
82

Windows 10、「システム」プロセスが大量のRAMを消費する

Windows10にアップグレードしてから、システムがRAMを過剰に消費するようになった

少し読んでみたところ、ドライバからメモリが漏れている可能性が高いと判断しました。そこで、自分でWindows Driver Kitを手に入れて、poolmonでメモリ使用量を追跡してみたところ、

と出ました。この問題の犯人は「smNp」というタグのついた項目なのでしょうか?そこから実際にドライバを特定するにはどうすればいいのでしょうか?

“C:WIndows\System32\drivers>findstr /s smnp ."とかやってみたけど、全然ダメだった。また、pooltag.txtファイルを見てみたところ、以下のように記述されていました。ありがとうございました。

回答 (4)

93
93
93
2015-08-07 04:20:09 +0000

何人かのユーザーのxperfのトレースを見てみましたが、ここではカーネルの関数ntoskrnl.exe!SmKmStoreHelperWorkerがメモリの割り当てを開始しています。

(画像をクリックすると拡大します)

これは sysinternals で発見しました。

マイクロソフトに聞いてみたところ、これは設計上の問題だという答えが返ってきました。システムメモリの圧縮に関係しています。

Windows 10 Build 10525の発表で、Microsoftが少し説明していました .

Windows 10では、メモリマネージャに圧縮ストアと呼ばれる新しい概念が追加されました。これにより、プロセスごとに使用されるメモリ量が削減され、Windows 10では一度に多くのアプリケーションを物理メモリ上で維持できるようになります。これはまた、Windows 10 全体でより良い応答性を提供するのにも役立ちます。圧縮ストアは、システムプロセスの作業セットに格納されます。システムプロセスがストアをメモリ内に保持しているため、システムプロセスの作業セットは、メモリが他のプロセスで使用可能になると同時に大きくなります。これはタスクマネージャで確認でき、システムプロセスが以前のリリースよりも多くのメモリを消費しているように見える理由です。そして、この圧縮されたメモリはシステムプロセスに表示されます。

Microsoftはインサイドハブにも詳細を掲載しています。 Winbetaさんが記事を作成しました 詳細が記載されています。

どうやらこの原因は、マイクロソフトがUWPアプリがフォアグラウンドにないときにUWPアプリをサスペンドすることを選択したことに関係していたようで、いくつかのスマートフォンのOS管理に非常に似ています。Windows 8のユーザーは、アプリが画面に表示されていなければ、ユーザーがアプリに切り替えるまで起動しないことを理解していた(おそらく理解していなかった)。Windows 10では、ページファイルと通常のページングアクティビティの間にレイヤーを導入することで、「オール・オア・ナッシング」アプローチが更新されています。現在、メモリ圧の問題に直面した場合、MMは、トリミングと呼ばれるプロセスでどのページを変更されたリストに移動すべきかを判断します*** 変更されたリストは、待機ページファイルのリストをバックアップするページファイルのセカンダリリストです。変更後のリストは、待機ページファイルのリストをバックアップしているページファイルのセカンダリリストです。Windows 10 MMでは、ディスクに書き込むのではなく、使用されていないページを圧縮します。これにより、ディスクへの書き込みが少なくなり、結果としてディスク操作が少なくなります - 圧縮のおかげで - より多くのデータをメモリに保存できるようになりました。

Windowsチームによると、" **実際には、圧縮されたメモリは圧縮されていないサイズの約40%を消費し、典型的なデバイスが典型的なワークロードを実行した結果、Windows 10がディスクにページを書き出す頻度は、以前のバージョンのOSに比べて50%に過ぎません。

解凍もまた、Windows 10がうまく機能するように設計されています。Windows 10 は、一度呼び出されたページをメモリに生成するために、並列性とシーケンシャルリードの組み合わせを使用しています。Windows 10は複数のCPUを使ってデータの解凍と読み込みを同時に行っているので、新しい解凍はより高速な体験になるはずです。旧バージョンのWindowsでは、ディスク間の転送速度の関係で遅く感じていたかもしれません。

マイクロソフトはこの機能を説明する動画もchannel9で公開しています。

Memory Compression in Windows 10 RTM https://channel9.msdn.com/Blogs/Seth-Juarez/Memory-Compression-in-Windows-10-RTM

このビデオの中で、Mehmet Iyigun氏は、Windows 10のシステムプロセスがより多くのメモリを消費する理由と、それがなぜ良いことなのかについて時間をかけて議論しています。プロセスがより多くのメモリを消費するのは悪いことのように聞こえますが、それはメモリ管理、ページング、ハード/ソフトページフォルトについて理解するまでの話です。OSがいくつかの巧妙な最適化を行っていることが判明しました。メモリがRAMに保存されているだけでなく, それはまた圧縮されている - ハードページフォルトがよりまれに発生するように. その結果、より高速に動作するようになります。

最新の TH2 ビルドでは、Microsoft はタスクマネージャの説明を更新し、SYSTEM プロセスが compressed memory をホストしていることを示すようになりました。

と表示されるようになりました。

2016年8月にリリースされたWindow 10 Anniversary Updateでは、Microsoftは圧縮を抽出してMemory Compressionと呼ばれる疑似プロセスで表示されるようになり、SYSTEMがなぜそのような大きなメモリ使用量を持っているのかについてユーザーを混乱させないようにしました。

しかし、Taskmgrはこのプロセスを表示していないようで、ProcessExplorer/ProcessHackerだけが表示できるようになっています。Taskmgrでは、概要に圧縮されたメモリの量だけが表示されます。

Taskmgrの使用済みメモリのグラフにカーソルを合わせると、圧縮されたデータの量を示すツールチップが表示されます。

このデモでは388MBが122MBに圧縮されているので、267MBが圧縮されて保存されています。

13
13
13
2015-08-09 23:24:30 +0000

services.msc(Win+R経由)に入ってSuperfetchを無効にすることで完全に解決します。Superfetchが今のところ壊れているだけなのか、それとも「設計上」壊れているのかはわかりません。

さらに、どうやらページングファイルを削除しても同じ効果があるようですが、上記の解決策の方が安全です。

0
0
0
2019-08-31 16:21:39 +0000

システムメモリの使用量が多い原因となる異常なケースを見つけたので、この情報が誰かの役に立つ場合に備えて、それを含めておきたいと思いました。

Microsoftのボリュームスナップショット(ハードウェアスナップショットではなくソフトウェアスナップショット)を多用している場合、スナップショットの数が多いほど、大きなデータの変更を組み合わせて保存すると、システムはより多くのRAMを消費するようになります。

通常、ボリュームスナップショットに使用されるRAMの量は少なく、巨大なボリューム(例:64TB)でスナップショット間に数テラバイトの差分がある場合を除いては、気づかれることはありません。デフォルトでは、書き込みIOが高くなりすぎると、スナップショットは単純に自分自身を削除しますが、これを防ぐ方法があり、大規模なデルタに到達することができます。

以下は、サーバーのシステムプロセスが13GBのRAMを使用している極端なケースです。このサーバーには、15日間隔で2つのボリュームスナップショットしかなく、各スナップショットの間に約10TBのデータが書き込まれています。

上記のSystemプロセスは以前は24GBの使用量で、以下の3つの動作が観察されました。

1.再起動してログインし直した後、デスクトップが表示されるまでの間、システムは空白の画面で一定時間ハングアップしていました。 2. このハング中に、タスクマネージャ(CTRL-SHIFT-ESC)を起動すると、システムのメモリ使用量が増加していることがわかりました。 3. このハングの間、ボリュームスナップショットのあるディスクは、パフォーマンスモニタに表示されない多くの読み取りを実行しました。しかし、ディスクはiSCSIを使用しているため、ネットワークカードは200Mbps程度の安定したリードストリームを示していました。

ボリュームスナップショットを疑ったので、一番古いスナップショットを削除してみたところ、システムのメモリ使用量が24GBから13GBになりました。

このような状況では、これは正常な動作かもしれませんが、Microsoftには確認していません。とりあえず、スナップショットのオーバーヘッドを処理するために、このサーバーに32GBのRAMを追加する予定です。

(注: これはWindows 2016を実行している大容量バックアップサーバーで、64TBのSSD iSCSIドライブが接続されています。常に平均3つのボリュームスナップショットを維持しており、15日ごとに新しいスナップショットが作成されます。各スナップショットの間には約10TBのデータが書き込まれています)。

-1
-1
-1
2015-08-20 11:08:59 +0000

regeditキーでプリフェッチャを無効にする: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters Enable Prefetcher の値が23になっていると思いますので、0

に変更してください& 次に、サービスのSuperfetchを無効にする必要があります

1.services.msc

を検索します。superfetchを見つけてpropertiesをクリックし、disabledに設定してサービスも停止させます。

以上の手順で、ゲームをしている時や普段PCを使っている時に、systemの処理が28kしか使っていません。