Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

Windowsでの非ページプールメモリ使用量(リーク)が高い

Windowsコンピュータとサーバーでは、システムの非ページメモリプールにデータを格納する特定のシステムドライバのリークが原因で、メモリオーバーフローの問題が発生する可能性があります。 ページングされていないメモリプー lは、オペレーティングシステムのカーネルとドライバによって使用されるコンピュータのRAM内のデータです。非ページプールはディスク(ページングファイル)にスワップされることはなく、常に物理メモリにのみ保存されます。

非ページメモリの現在のサイズは、メモリで確認できます。 パフォーマンスのセクション タスクマネージャのタブ。以下のスクリーンショットは、サーバーのほとんどすべてのメモリがビジーであり、そのほとんどが非ページプール4.2GBによって占有されていることを示しています。通常、非ページプールのサイズが200〜400MBを超えることはめったにありません。ページングされていないプールサイズが大きい場合は、多くの場合、一部のシステムコンポーネントまたはデバイスドライバにメモリリークがあることを示しています。

Windowsでの非ページプールメモリ使用量(リーク)が高い

サーバーの非ページプールでメモリリークが発生した場合、次のイベントがシステムイベントログに表示されます。

イベントID:2019
ソース:Srv
説明:The server was unable to allocate from the system nonpaged pool because the pool was empty

ほとんどの場合、上記のメモリリークの理由は、Windowsにインストールされているサードパーティのドライバに問題があるためです。原則として、これらはネットワークドライバーです。大きなファイルをダウンロードするときは、プールの動作に注意してください(ほとんどの場合、プールは急速に大きくなります)。

Windowsでの非ページプールの最大サイズ:

  • Windowsx64は最大128Gb、物理メモリの75%以下
  • Windowsx86は最大2Gb、RAMは75%以下

Windowsの再起動のみが、ページングされていないプールのクリーンアップに役立ちます。家庭用デバイスには問題ないかもしれませんが、24時間年中無休で稼働するサーバーにはより良いソリューションを見つける必要があります。

内容:

  • ネットワークデータ使用量監視ドライバーを無効にする
  • PoolMonを使用してカーネルモードのメモリリークを見つける
  • 最新バージョンのネットワークアダプタドライバをインストールする
  • Hyper-Vの役割を無効にする

ネットワークデータ使用量監視ドライバーを無効にする

多くの場合、非ページプールでのメモリリークの理由は、ネットワークアクティビティ監視ドライバーの非互換性です(ネットワークデータ使用量 — NDU、%WinDir%\system32\drivers\Ndu.sys )ネットワークアダプタドライバを使用します。ほとんどの場合、KillerNetworkおよびMSIネットワークカードドライバーはNDUドライバーと競合します。このサービスは、Windowsの機能を大幅に失うことなく無効にできます。

次のコマンドでNDUサービスを停止します:

sc config NDU start= disabled

Windowsでの非ページプールメモリ使用量(リーク)が高い

またはレジストリを介して:

  1. レジストリエディタ( regedit.exe )を開きます );
  2. レジストリキーHKEY_LOCAL_MACHINE\ SYSTEM \ ControlSet001 \ Services \ Ndu \に移動します;
  3. 開始の値を変更します 4へのパラメータ。

Windowsでの非ページプールメモリ使用量(リーク)が高い

変更を加えたら、コンピュータを再起動する必要があります。

PoolMonを使用したカーネルモードのメモリリークの検出

非ページプールでメモリリークの原因となったドライバを特定することができます。これを行うには、 Poolmoon.exeが必要です。 Windows Driver Kitに含まれているコンソールツール (WDK)。 MicrosoftからWindowsバージョン用のWDKをダウンロードしてインストールします。次に、Poolmon.exeを起動します(WDK for Windows 10の場合、ツールはC:\Program Files (x86)\Windows Kits\10\Tools\にあります。 フォルダ)。

ツールを起動したら、 Pを押します。 。 2番目の列には、ページングされていないメモリ(Nonp属性)を使用するプロセスのタグが表示されます。次に、 Bを押します キーを押して、ドライバリストを[バイト]列で並べ替えます。

Windowsでの非ページプールメモリ使用量(リーク)が高い

左側の列は、ドライバータグを示しています。あなたの仕事は、このタグを使用してドライバーファイルを識別することです。この例では、ページングされていないプールのRAMのほとんどが、タグ Nr22を持つドライバーによって使用されていることがわかります。 、 ConT 、および smNp

strings.exeを使用して、見つかったタグのドライバーを確認する必要があります 組み込みのfindstrを使用するツール(Sysinternalsから) コマンド、またはPowerShellを使用します。

次のコマンドを使用して、見つけたタグに関連付けられているドライバーファイルを見つけます。

findstr /m /l /s Nr22 %Systemroot%\System32\drivers\*.sys
findstr /m /l /s ConT %Systemroot%\System32\drivers\*.sys
findstr /m /l /s smNp %Systemroot%\System32\drivers\*.sys

または、PowerShellを使用することもできます:

Set-Location "C:\Windows\System32\drivers"
Select-String -Path *.sys -Pattern "Nr22" -CaseSensitive | Select-Object FileName -Unique
Select-String -Path *.sys -Pattern "Py28" -CaseSensitive | Select-Object FileName -Unique
Select-String -Path *.sys -Pattern "Ne40" -CaseSensitive | Select-Object FileName –Unique

タグのドライバーファイルは、poolmon.exeで直接マップできます。これを行うには、 pooltag.txtを確認してください ファイルはツールディレクトリにあります。 pooltag.txtをWDKインストールディレクトリからコピーするか、GitHubからダウンロードできます。次のようにpoolmonを実行します:

poolmon /g

Windowsでの非ページプールメモリ使用量(リーク)が高い

ドライバー名がMapped_driverに表示されることに注意してください 桁。

そのため、問題を引き起こす可能性のあるドライバーファイルのリストがあります。次に、これらのファイルが参照しているドライバとシステムコンポーネントを名前で特定する必要があります。これを行うには、 sigcheckを使用できます Sysinternalsのツール。

sigcheck C:\Windows\System32\drivers\rdyboost.sys

このツールは、ドライバーまたはWindowsコンポーネントの名前、説明、およびバージョンを返します。

Windowsでの非ページプールメモリ使用量(リーク)が高い

これで、問題のあるドライバーまたはサービスのアンインストール/更新/再インストールを試みることができます。

メモリリークによってBSODが発生した場合は、メモリダンプファイルで問題のあるドライバを特定できます。

  1. メモリダンプをWindbgデバッガーにロードします;
  2. コマンドを実行します:!vm
  3. NonPagedPoolの使用法の場合 値がNonPagedPoolMaxより大きい 、ページングされていないプールが使い果たされていることを意味します。
  4. 次のコマンドでプールの内容を確認します(結果はページングされていないプールの使用状況で並べ替えられます):!poolused 2
  5. ドライバータグを取得したら、findstrを使用してドライバーファイルを検索します またはstrings.exe 上記のように。
最新バージョンのネットワークアダプタドライバをインストールする

ベンダーのWebサイトから、ネットワークアダプタの最新のドライババージョンをダウンロードしてインストールしてみてください。

Windowsでドライバーの自動更新が有効になっている場合は、新しいドライバーのインストール後に問題が発生したかどうかを確認してください。以前のドライバーバージョンにロールバックして、問題が解決するかどうかを確認してください。問題が解決した場合は、ドライバーの自動更新を無効にします。

Hyper-Vの役割を無効にする

場合によっては、インストールされたHyper-Vの役割により、ページングされていないプールへのメモリリークが発生します。この役割が必要ない場合は、無効にすることをお勧めします。

Windows Serverでは、PowerShellコマンドを使用してHyper-Vの役割を無効にできます。

Remove-WindowsFeature -Name Hyper-V

Windows 10のコマンド:

Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

検索で結果が返されない場合は、メモリリークがユーザーモードプロセスによって引き起こされたかどうかを確認してください。タスクマネージャを開き、詳細に移動します タブで、NPプールを追加します 列を作成し、ページングされていないプールでメモリサイズが大きいプロセスを探します。

Windowsでの非ページプールメモリ使用量(リーク)が高い

このガイドは、Windows Server 2019/2016/2012RとデスクトップWindows10/8.1の両方に適用されます。


  1. 診断ポリシー サービスの CPU とメモリの使用率が高い問題を修正する方法

    Windows、macOS、Linux など、使用している OS に関係なく、いくつかのアクティブなプロセスとサービスがバックグラウンドで実行されます。私たちユーザーは、多くの場合、大量の CPU 使用率とシステム リソースを使用するこれらの複雑なサービスに気づいていません。 そのため、診断ポリシーは、Windows 上で実行される重要なプロセスの 1 つです。さまざまな Windows コンポーネントの問題を検出し、デバイスを再起動するたびに実行するように自動的に構成されます。このサービスの唯一の目的は、マシンの使用体験を向上させ、エラーや複雑さを最小限に抑えることです。診断ポリシー サー

  2. Google chrome Windows 10 での高いメモリ使用量を減らす方法

    Google chrome は、インターネット愛好家の間で最も使用されている Web ブラウザーの 1 つであり、ブラウジング体験をより速く、よりスムーズに、より簡単かつ安全にする、最小限で真にクリーンな環境で人気があります。しかし、ユーザーが Google chrome について報告する最大の不満の 1 つは、ブラウザーが大量のシステム RAM を使用することです。最終的には、Chrome ブラウザーと Windows 10 コンピューターの速度が低下し、全体的なユーザー エクスペリエンスに影響を与えます。この投稿では、Chrome のメモリ使用量を減らすためのヒントをいくつか紹介します。