WindowsOSのメモリ管理(StandbyList)

最終更新日 2021年3月22日

最近ネット上から大量のファイルをダウンロードしたんですが、ある段階からHDDのアクティブな時間が100%になって、ブラウザ画面がフリーズのような状態になりました。と云ってもOSの処理が滞っていると云うよりもブラウザとHDD間の処理の問題のように感じていました。
ブラウザはChromeで、調べて見ると特定のバージョンでメモリリークのバグがあるとのこと。正しくそのバージョンを使っていたため、指示に従ってUpdateしました。その結果、ブラウザ画面のフリーズのような状態はなくなり、タブ切替操作も出来るのですが、HDD 100% と異様にダウンロードが遅くなると云う現象が解決するわけではありませんでした。

OS起動後、ダウンロードを開始して、暫くは高速にダウンロード出来ているのです。HDDのアクセスランプも点滅状態です。そしてあるタイミングから点灯状態に陥ります。この状態に陥るとダウンロード中のファイルは途中で接続切れになってしまい、再接続もうまくゆきません。
再現性もあります。
ただ、待てば回復するのです。待ち時間は数十分ってところです。待つのは苦痛です。

この状態が何に起因するのか調査しました。そして幾つかの情報を得ました。

上記の解決方法として、『Empty Standby List』を実行するという情報が挙げられています。

Empty Standby ListというのはSysInternal社の提供するRAMMapと云うツールに搭載されている機能です。最新版はv1.60のようです。
コマンドラインで実行出来るEmpty.exeと云うのもあるようです。

※StandbyListというと飛行機の空席待ちリストを思い浮かべます。空席待ちをするような状態ではなかなかキャンセルは発生しないモノです。強制的に空席を確保しなければ、、、

RAMMapは、Windowsが物理メモリをどのように割り当てているかを知る上のツールとなります。
Windowsはリソースモニタというツールを提供しています。メモリの割当状況をモニタ出来るのですが、その挙動についてどうしてそうなるのか調べようとするのは難しそうです。
リソースモニタが示すStandbyというメモリに注目します。この領域はOS起動時には基本0で、Free領域になっているのですが、ファイルのダウンロードだとか、アーカイブファイルの解凍、ファイル転送コピー等々を実行するとあっという間にFree領域がStandby領域に変わります。ファイルキャッシュとして有効利用し、デバイス間の処理速度差を吸収しようとしていると考えられます。
使い終えたら開放してFreeにしてくれても良いと思うのですが、WindowsOSは再利用される可能性のデータだとしてそのまま残しておくようです。
当然新たに別目的でキャッシュが必要になったときにはStandby領域を開放しながら、要求されたメモリ領域を割り当ててゆくようですが、ここで開放すべきメモリをOS側が忖度して処理しますので、この時間がそれなりに掛かるようです。
この状態の時に次々にメモリ要求が掛かるとファイル書き込み処理にまで影響を与えてしまうようで、HDD 100%に陥ってしまうようです。そして時間がこれを解決しますが、その待ち時間は耐えられないモノです。

自分自身ファイルダウンロードを続ける際に、適当なタイミングで『Empty Standby List』を実行して、ダウンロード処理を続けていったところ、最後まで『HDD 100%』に陥ること無く作業を終えることが出来ました。
コマンドラインのツールが用意されているのは定期的に実行する様なスクリプトを考慮してなのでしょうか?

OS側は善かれと思って実行しているシーケンスなのでしょうが、ユーザにとっては同意出来ない事も多いです。意図的にコントロール出来る事は良いことです。

こういった問題の問い合わせに頓珍漢な回答をするエバンジェリストが多くいます。問題となる現象を自分の手元でも再現させ、真摯に対応してほしいものです。


手元の環境下で再現テストを実施しました。FreeメモリがなくなるタイミングとHDD100%になるタイミングの関連性を見いだしたいと思いました。

始める前に『Empty Standby List』を実行します。その上で適当なファイルをWeb上からダウンロード開始します。

あっという間に『Standby』でメモリで埋め尽くされます。その間、HDDの書込キューは増減しながら処理されます。そして、Freeメモリがなくなりました。でもそのタイミングではHDD100%にはなりません。しかし書込キューの動きはおかしくなります。キューの減少が遅くなるのです。

そして、HDD100%状態に陥りました。陥ると書込速度が極端に落ちます。それがなかなか回復しないのです。

リソースモニタを観察していれば、Freeメモリがなくなるタイミングが判ります。Freeがなくなりそうになり書込キューが残っていない状態で『Empty Standby List』を実行すると、その後のダウンロードもHDDのアクセスランプ点滅状態で処理を続けることが出来ました。

実メモリの空きが数十GB有っても、ストリーミングで画像保存をしてしまうとあっという間に『Standby』メモリで埋め尽くされてしまいます。すぐに開放してくれれば良いのですが、OSの気まぐれまでは判りませんので、意図的に『Empty Standby List』を実行することで不本意な状態に陥ることを回避出来そうです。


戯言(nonsense)に戻る


問い合わせ頁の表示


免責事項

本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。

本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。

商標・登録商標

Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。