2019年06月10日

プールが空であるため、サーバーはシステムの非ページ プールから割り当てることができませんでした。

『プールが空であるため、サーバーはシステムの非ページ プールから割り当てることができませんでした。』 srv 2019 エラー

srv-2019

非ページ プールとは何か… 直感で書いた図解です。

page-pool

(2022/1/25 追記)

※ 物理メモリー = コンピューターに装備されているメモリー 「実装 RAM」とも呼ばれる
※ 仮想メモリー = アプリから見えるメモリー空間全体。32-bit アプリであれば 4GB の空間。この空間が 4KB ずつに分割されている。必要に応じて「物理メモリ―」「ページングファイル」などがマッピングされる。アプリに何を見せるかは Windows が決定する。

〜〜〜 2019/12/26 追記  (2020/01/16 更新!) 〜〜〜

要約しますに
・ページプール=pagefile.sys へ移動可能なメモリ。アプリで使うメモリなど
・非ページプール=pagefile.sys へ移動不可能なメモリ。OS 内部の情報や、ハードウェアとの通信に使用するメモリなど。
 
 
タスクマネージャーで目安値を確認してみました:
- Windows 10 (ver 1809) では 500 MB ほど
- Windows Server 2012 R2 では 250 MB ほど
 
 
「非ページプール」は、通常の利用状態では枯渇しません。
枯渇するとすれば、メモリリークの発生によるもので、
大体はデバイスドライバーの不具合によるものです。

これが発生してしまうと、
Windows の再起動しか解決方法がありません。

発生源の特定方法は一応分かりました。
しかしハードウェアベンダーが問題を修正してくれるかどうかは
別問題です。

〜〜〜 6/26 更新 〜〜〜

下図はちょっと古い(最近のパソコン事情を考慮していない、とても古いマイコン時代のノイマン型の遺物)ですが、説明し易いです。
PhysMem

GPU とか USB ホストとか、AHCI (SATA) とか、デバイスと CPU の間でデータをやり取り (1 バイト〜100 MB ほど?) する為にはメモリー空間が必要な訳です…

具体的にどのくらいの容量? につきましては「メモリの範囲」から推測します。

MemRange

SATA (AHCI) の場合は F7E1A7FF - F7E1A000 で、たったの 2KB! とっても経済的ですね!
と思ったら間違いです…
この 2KB は主にコマンドを格納するだけで、
SATA (AHCI) の方から DMA 等で別途データを送り込んでくる設計になっています。その受け皿を物理メモリ上に用意しないといけません。
という事で「メモリの範囲」は、あてになりませんでした orz

PhysMem2

実際に、どのくらいの物理メモリを消費するのかは不明です(デバイスドライバー依存)

driver

こういったディスクを扱うデバイスとか、GPU とかは、物理メモリ(非ページプール)を消費しそうです。

あとウィルス対策ソフトも物理メモリ(非ページプール)を消費しそうです。ウィルスデータの定義ファイルとか、常時メモリ上に置いていないとスキャンができませんからね…

あと、非ページプールの物理メモリは断片化するという問題点があります。デフラグができません。断片化による問題とは、連続した空き領域の確保ができなくなる…
例えば (1MB free + 使用中 + 1MB free + 使用中 + 1MB free) の場合、3MB free ですが、連続した空きは 1MB です。

あとはソフトウェアの不具合でメモリリークが発生するなど、使用後開放されないメモリがあるとかでしょうか…

という事で、Windows も定期的な再起動が必要になります。

 『プールが空であるため、サーバーはシステムの非ページ プールから割り当てることができませんでした。』の、まとめ

 非ページ プール という、物理メモリに直接領域を割り当てできる概念があります。
 GPU とか USB ホストとか SATA (ACHI) とか、大量のデータを転送するデバイスは、非ページプールから大量のメモリを確保しがちです。
 ウィルス対策ソフトなど、カーネルモードで動作するアプリも非ページプールを占有しがちです。
 ソフトの不具合でメモリリークが発生する場合があります。
 物理メモリは断片化しますが、デフラグができません。

上記理由により、非ページ プールが枯渇する場合がございます。Windows を定期的に再起動するなどして、メモリをリフレッシュしてください。




〜〜〜 昔の説明 〜〜〜

現実世界の概念を用いると… 個人宛の書類箱と、個人の机になります。

paged-nonpaged


『プールが空であるため、サーバーはシステムの非ページ プールから割り当てることができませんでした。』 を説明するには IRQL や IRP をちょっと知る必要があります。

  • IRQL とは。平たくは「割り込みの緊急度合」です。
  • 割り込みとは。平たくは「あの… 丸々君、ちょっといいかな?」と対応を要求する行為のことです。
  • IRP とは、平たくは「これ、やっておいてください」の「これ」の詳細をデジタルの世界で表現したものです。
    例えば、「〜ファイルの内容を読み取ってください」 (IRP_MJ_READ) といった感じです。こういう感じの要求が 23 種類ほどあります。
  • 緊急度合には、平たく「通常」と「高い」があります。
  • 「通常」であれば、やれる事に制限はありません。
  • 「高い」であれば、やってはいけない事がいくつかあります。
    例えば「ディスクの読み書き完了を待つ」とかですね…
    現実世界でいうと「あの〜の件だけどね… じつは○○○で、×××で〜」のように、手が取られる状態で延々と説明を聞いてしまう状態です。そういう場合はアサーションのテクニックで「お急ぎなのは分かりますが、少々手が込んでいるので後でお伺いに参ります」のように待ってもらう必要がありますが… IRQL の「高い」場合の対応も、大体それと同じ考え方です。
  • ページとは、大体 4KB のメモリー空間のことです。
  • ページプールとは、その 4KB が(物理メモリ or ページファイル)に存在するページ達のことです。上図でいうと、机の上にあったり、引き出しにあったり、カバンに入っていたりする状態です。ページプール → ページングできるプール。
  • ページングできるとは、ページングファイルに移動してもよいページのことです。目的は、物理メモリが不足した場合に、物理メモリに無理矢理スペースを作る為です。
  • 非ページプールとは、その 4KB が常に物理メモリに存在するページ達のことです。上図でいくと、共有スペースに固定されたファイル箱です。非ページプール → ページングできないプール
  • ページングできないとは、ページングファイルへ移動してはならないページのことです。
    2020/01/21 修正
  • 緊急度合「高い」 = DISPATCH_LEVEL、「通常」 = PASSIVE_LEVEL
  • 緊急度合「高い」。人間での例としては「電話中」の状態です。他の事がまったく手出しできない状態。相手と通話できているのならば良いのですが、相手が居ないのに「帰ってくるまで待ちます!」などと言語道断な対応をすると Windows では IRQL_NOT_LESS_OR_EQUAL になります…  通常の対応であれば、緊急度「高い」の電話はいったん切り、あとで掛けなおすという「通常」タスクを入れるものと思います。
  • 郵便物などはファイル箱に入れて頂く訳ですが… このスペースには限りがあります。
  • パソコンなどの大きな荷物がどんどん届くと、すぐに空間を占有してしまいます。
  • そして共有スペースが物であふれかえった状態が、「システムの非ページ プール」の枯渇を意味します。
  • こうなってしまった場合、通常 Windows の再起動が必要になります。


digitaldolphins at 15:01コメント(0) 

コメントする

名前:
URL:
  情報を記憶: 評価:  顔   星
 
 
 
記事検索
5S活動と3S活動の手引き

livedoor プロフィール

digitaldolphins

Archives
QRコード
QRコード
  • ライブドアブログ