要点

Nonpaged Poolが多く見えるときは、RAMMapのUse CountsとWindowsのメモリカウンターで同じ分類を確認します。一定の間隔で値を記録し、同じ作業を再現してください。1回の高い値だけではリークと断定できず、RAMMap単独では割り当てたドライバーやPool Tagも分かりません。継続的な増加が確認できたら時系列の証拠を保存し、PoolMonやWindows Performanceの記録でカーネル割り当てを絞り込みます。証拠を取る前にStandbyを空にしたり、複数のドライバーを変更したりしないでください。

Nonpaged Poolが多い状態とは

Nonpaged Poolは、使用中に物理RAM上へ常駐しておく必要があるカーネルメモリです。Windowsやドライバーなどのカーネルモードの部品は、ストレージからページを戻すまで待てない処理にPool割り当てを使います。RAMMapは用途ごとにメモリを分類しますが、割り当てスタックをすべて表示したり、増加した割り当ての所有者をドライバー名で示したりはしません。

値は搭載RAM、再起動からの時間、Windowsのビルド、接続機器、実行中の作業と合わせて見ます。すべてのPCに当てはまるリーク判定の容量基準はありません。繰り返せる作業中にNonpaged Poolが増え続け、作業後も高いままなら、空きメモリの低下、ページング、応答の悪化と一緒に調べてください。

RAMMapのUse Countsを開き、Nonpaged Poolの行をほかの用途分類やページリストの状態と比べます。物理メモリの用途とStandbyのような状態は、答える質問が異なります。違いはRAMMapのメモリ種類ガイドで確認できます。

Nonpaged Poolとほかのメモリ分類を比べるRAMMapのUse Counts画面
Use Countsでは大きい分類を確かめられますが、割り当て元のドライバーまでは特定できません。

変更を加える前に分類を確かめる

検証済みのRAMMapがなければ、まずMicrosoft Sysinternalsの配布ページから入手します。適切な権限で起動し、表示が読み込まれてからF5で更新して基準値を記録します。最初にEmptyコマンドを実行しないでください。ページリストが変わると、その後の比較が難しくなります。

タスクマネージャーのパフォーマンスにあるメモリ表示も確認し、Non-paged poolの値を記録します。長時間の観測ではPerformance MonitorのMemoryグループにあるPool Nonpaged Bytesカウンターを記録します。名称は英語版の表記で、Windowsの言語によって翻訳されます。カウンターは時間変化を示しますが、ドライバー名は示しません。

Windowsのビルド、搭載RAM、稼働時間、作業内容、記録時刻、仮想マシンや特殊な機器の有無を残します。比較時の条件をそろえ、増加のきっかけと思われる操作を再現する前にRAMMapのスナップショットを保存してください。

  1. 1. 更新する

    Use Countsを開いてF5を押し、同じ表示が落ち着くまで待ちます。

  2. 2. 記録する

    スナップショットを保存し、Nonpaged Pool、空きメモリ、Commit、時刻を記録します。

  3. 3. 再現する

    無関係な設定は変えず、通常の作業や機器操作を1つ実行します。

  4. 4. 比較する

    決めた間隔で更新し、作業後に値が安定するか確認します。

一度だけ高い値が出た場合と継続増加を分けるトラブルシューティングの流れ
概念的な手順です。確認、再現、比較の順に進め、増加が続く場合にドライバー用ツールを選びます。

追加調査が必要な推移か判断する

1枚のスナップショットでは、通常の作業による割り当てとリークを区別できません。Nonpaged Poolの増加を確認するときは、同じ操作を繰り返し、一定間隔で記録し、操作後のアイドル時間も含めます。作業中に増えて後から落ち着く場合と、実行のたびに増えて停止後も高い場合では、証拠の意味が異なります。

Poolの推移を空きメモリ、Commit、ページング、実際の症状と比べます。値が高くても動作が安定していれば、緊急のクリーニングではなく監視が適切なことがあります。メモリ圧迫や再現性のある遅延を伴う継続増加は、調査を進める根拠になります。別の人も比較を再現できるよう、スナップショットと作業メモを保存します。

再起動直後の値と数時間稼働した後の値は、稼働時間が試験条件でない限り直接比べません。合計値が変わっただけでドライバー故障と判断せず、何をいつ変更し、同じ操作で再現するかを記録します。

Nonpaged Poolの観測結果を読み分ける
観測結果分かること次の手順
1回だけ高い値確認すべき分類だが、リークの証明ではない更新して基準値を保存する
作業中に増え、後で落ち着く作業に伴う割り当てが解放される可能性同じ作業を再現して比較する
繰り返すたびに増え、高いまま割り当ての残留やリークの可能性証拠を保存してPool Tagを調べる
ページングや不安定さも増えるシステム全体のメモリ問題への対応が必要負荷試験を止め慎重に相談する

PoolMonで継続的なPool増加を絞り込む

PoolMonはWindows Driver Kitに含まれる、カーネルPool Tagを調べるツールです。再現できる増加があると、どのTagがバイト数を占めているかを確認できます。出所不明の単体配布物ではなく、Microsoftのドライバー開発ツールから入手してください。オプションと表示方法はMicrosoftのPoolMonドキュメントを参照します。

管理者権限のターミナルから、管理された診断セッションでPoolMonを起動します。/bオプションはバイト数で並べ替えます。インストール済みバージョンのヘルプでも操作を確認してください。Tag、Poolの種類、Bytes、Allocations、Frees、時刻を記録し、同じ作業を再現してRAMMapの合計と同時に変化するTagを探します。

Tagが常にドライバー名を示すとは限りません。複数の部品で共有されたTag、未公開のTag、システム部品のTagもあり、Tagデータベースで対応付けられない場合があります。見つかった名前は手掛かりとして扱い、署名済みドライバー、最近の変更、操作時刻と照合してください。短いTag検索だけでドライバーを削除したりレジストリを編集したりしないでください。

PoolMonをバイト数で並べ替えるpoolmon.exe /b
ツールの入手について

PoolMonはWindowsのドライバー開発ツールに含まれ、RAMMapの標準画面ではありません。利用できない場合やTagが特定できない場合は、記録を保全し、管理者またはドライバーの専門家に相談します。

Tagを安全なドライバー調査につなげる

Poolの増加時刻を、機器操作、サービスの起動、ドライバー更新、VPNやセキュリティ製品、ストレージ処理、仮想マシンの負荷と照合します。一度に変更する要因は1つにし、同じテストを繰り返します。該当する機器とWindowsビルド向けに署名済みドライバーが提供されている場合は、メーカーの更新またはロールバック手順を使い、変更前後のバージョンを残します。

適切なプロファイルとシンボルがあれば、Windows Performance RecorderとAnalyzerでシステムの動きを記録して調べられます。RAMMapやPoolMonより手順が複雑で、記録ファイルが大きくなる場合もあります。再現性があり、時間軸のあるカーネル調査に証拠上の理由がある場合に使い、記録対象を絞って診断データとして扱います。

Driver Verifierは選んだドライバーに負荷をかけ、バグチェックを引き起こすことがあります。本番PCで最初に試す一般的な方法ではありません。対象ドライバー、復旧手段、Microsoftの手順を理解した担当者のもとでのみ使います。通常の切り分けでは、スナップショット、カウンター、PoolMonの推移、メーカーの更新から始めます。

  • ドライバーの更新や削除前にRAMMapのスナップショットとカウンター記録を保存します。
  • 機器名、ドライバーの提供元とバージョン、日付、Windowsビルド、作業内容を記録します。
  • PCまたは機器メーカーが提供する対応パッケージと復旧手順を使います。
  • PCが不安定になったら再現操作を止め、管理者やサポート担当者へ連絡します。

表示値だけを変える対処を避ける

Standbyを空にしても、カーネルドライバーのNonpaged Pool割り当ては解放されません。ワーキングセットの縮小、RAMクリーナー、定期的なキャッシュ削除は別の分類を変えるだけで、増加中のPoolを残す場合があります。役立つ証拠を消したりファイルアクセスを遅くしたりする可能性もあります。

一律の容量基準、未確認のレジストリ変更、ドライバー削除ツールに頼らないでください。対応済みのドライバーを一度に1つだけ変更し、基準値と戻す手段を残します。

RAMMapでProcess PrivateやMapped Fileが増えているなら、Pool Tagではなくその分類を調べます。Process Private増加のガイド、Mapped File増加のガイド、RAMMapでメモリリークを調べる手順を参照してください。

手元の証拠に合わせて次の手順を選ぶ

値は高くても安定し、PCが通常どおり応答するなら基準値を保管して対象の作業中に観察します。繰り返し増えるならスナップショットを保存し、Nonpaged Poolカウンターを記録して機器やサービスの操作時刻と比べます。変化するTagにはPoolMonを使い、Tagだけで説明できない場合は対象を絞ったWindows Performanceの記録に進みます。

RAMMapが特に役立つのは最初の分類です。Use CountsでPoolの問題をStandbyキャッシュ、ファイルに基づくメモリ、プロセスのプライベート増加と分けて考えられます。RAMMapの使い方とメモリ種類の解説も参照してください。別の担当者が同じ推移を確認できるよう、生の記録を保管します。

よくある質問

RAMMapでNonpaged Poolを使うドライバーが分かりますか?

分かりません。RAMMapで分類と容量は確認できますが、割り当てをドライバーに対応付ける機能はありません。再現可能な記録の後、Pool Tagや性能トレース用ツールを使います。

1回の高いNonpaged Pool値はリークの証拠ですか?

いいえ。値はPCと作業内容によって変わります。作業後も残る再現性のある増加を探し、空きメモリ、Commit、ページング、症状と比較してください。

Standbyを空にするとNonpaged Poolは減りますか?

減りません。Standbyは別のページリスト状態です。空にしてもカーネルPool割り当ては解放されず、ファイルアクセスが遅くなったり証拠が失われたりします。

PoolMonはどこから入手できますか?

PoolMonはMicrosoftのWindows Driver Kitツールに含まれます。ドキュメントを確認し、信頼できるドライバー開発ツールを使ってください。単体の不明な配布元は避けます。

ドライバーを探すためにDriver Verifierを実行すべきですか?

最初の一般的な手順にはしないでください。Driver Verifierは意図的にクラッシュを起こす場合があります。対象を選び、復旧できる環境でMicrosoftの指示に従って使います。

サポートへ送るべき証拠は何ですか?

RAMMapのスナップショット、Nonpaged Poolカウンターの推移、Windowsビルド、稼働時間、機器とドライバーのバージョン、再現手順と増加の再現有無をまとめます。

まず分類する

MicrosoftからRAMMapを入手

Microsoft Sysinternalsのページを利用し、メモリ状態を変更する前に基準値を保存してください。

RAMMap公式ページを開く
15秒間の配布元確認後、MicrosoftのRAMMapページを開きます。

RAMMapの関連記事