AD レプリケーション エラー 8446 のトラブルシューティング: レプリケーション操作でメモリの割り当てに失敗しました

この記事では、エラー 8446 で Active Directory レプリケーションが失敗した場合の問題の症状、原因、および解決策の手順について説明します。

注:

ホーム ユーザー: この記事は、テクニカル サポート エージェントと IT プロフェッショナルのみを対象としています。 問題のヘルプを探している場合は、 Microsoft コミュニティに問い合わせてください

適用対象: Windows Server 2012 R2
元の KB 番号: 2693500

現象

この記事では、エラー 8446 で Active Directory レプリケーションが失敗した場合の問題の現象、原因、および解決策の手順について説明します。"レプリケーション操作はメモリの割り当てに失敗しました"。

  1. REPADMIN.exe は、レプリケーション試行がエラー "8446" で失敗したことを報告します- レプリケーション操作でメモリの割り当てに失敗しました

    DC=Contoso、DC=com
    RPC を使用した Default-First-Site-Name\DomainController
    DC オブジェクト GUID: <ソース DC ntds settings オブジェクト オブジェクト guid>
    最後の試行 @ <Date Time> failed, result 8446 (0x20fe):
    レプリケーション操作でメモリの割り当てに失敗しました。
    1359 連続エラー。
    前回の成功 @ <日付 & 時刻>。

    CN=Configuration,DC=Contoso,DC=com
    RPC を使用した Default-First-Site-Name\DomainController
    DC オブジェクト GUID: <ソース DC ntds settings オブジェクト オブジェクト guid>
    最後の試行 @ <Date Time> failed, result 8446 (0x20fe):
    レプリケーション操作でメモリの割り当てに失敗しました。
    1358 連続エラー。
    前回の成功 @ <日付 & 時刻>。

    ソース: Default-First-Site-Name\DomainController
    日付時刻以降 <の 1359 の連続するエラー>

    最後のエラー: 8446 (0x20fe):
    レプリケーション操作でメモリの割り当てに失敗しました。

  2. DCPROMO がエラー 1130 で失敗する

    06/05 09:55:33 [INFO] エラー - Active Directory は、リモート ドメイン コントローラー 5thWardDC1.contoso.com からディレクトリ パーティション CN=Configuration,DC=contoso,DC=com をレプリケートできませんでした。 (1130)
    06/05 09:55:33 [INFO] NtdsInstall for domain.net returned 1130
    06/05 09:55:33 [INFO] DsRolepInstallDs が 1130 を返しました
    06/05 09:55:33 [ERROR] Directory Service へのインストールに失敗しました (1130)
    重要でないレプリケーションが返された 1130
    err.exe 1130
    ERROR_NOT_ENOUGH_SERVER_MEMORY/ このコマンドを処理するのに十分なサーバー ストレージがありません。

  3. NTDS レプリケーション、8466 状態の NTDS 全般イベントは、ディレクトリ サービス イベント ログに記録されます。

    イベント ソース イベント ID イベント文字列
    NTDS レプリケーション 1699 ローカル ドメイン コントローラーは、次のディレクトリ パーティションに対して要求された変更を取得できませんでした。 その結果、次のネットワーク アドレスでドメイン コントローラーに変更要求を送信できませんでした。 8446 レプリケーション操作でメモリの割り当てに失敗しました
    NTDS 全般 1079 Active Directory でレプリケーション タスクを処理するのに十分なメモリを割り当てませんでした。 レプリケーションは、使用可能なメモリが増えるまで影響を受ける可能性があります 物理メモリまたは仮想メモリの量を増やし、このドメイン コントローラーを再起動します
  4. Repadmin または Active Directory サイトとサービスを使用してレプリケーションを手動で開始しようとすると、次のエラー メッセージが表示されます。

    ドメイン コントローラーのソース DC からドメイン コントローラー<の宛先> DC > に名前付けコンテキストContoso.comを同期しようとしたときに、<次のエラーが発生しました。
    レプリケーション操作でメモリの割り当てに失敗しました。 この操作は続行されません。

  5. ドメイン コントローラーが応答しなくなる可能性があり、再起動によって一時的な回避策が提供されます。

原因

8446 (操作がメモリの割り当てに失敗しました。この操作は続行されません) 状態は、Active Directory レプリケーション エンジンが Active Directory レプリケーションを実行するためにメモリを割り当てることができない場合に発生する可能性があります。

これらのイベントは、次の条件が原因で発生する可能性があります

  • 使用可能な物理メモリが少ない
  • 使用可能なページング ファイルのサイズと物理メモリのサイズが低い (ページング ファイルの構成が間違っている): ページング ファイルは物理メモリのサイズの 1.5 倍にする必要があります
  • カーネルでのページ プールまたは非ページ プールの枯渇
  • 32 ビット ドメイン コントローラーでの LSASS 仮想メモリの枯渇。 これは、LSASS の仮想メモリが、ユーザー モードで実行されているプロセスで使用できる仮想メモリの 2 GB の制限に達する場所です。
  • 仮想メモリの枯渇は、LSASS ユーザー モード プロセス内のリーク、またはデータベース キャッシュ (ESE キャッシュ) が使用可能なすべてのメモリを消費している可能性があります。

理解するには、次の情報が重要です

ドメイン コントローラーでの Lsass.exe メモリ使用量には、1 つの固定変数と 1 つの変数という 2 つの主要なコンポーネントがあります。

固定コンポーネントは、コード、スタック、ヒープ、およびさまざまな固定サイズのデータ構造 (スキーマ キャッシュなど) で構成されます。 LSASS で使用されるメモリの量は、コンピューターの負荷によって異なる場合があります。 実行中のスレッドの数が増えるにつれて、メモリ スタックの数も増えます。 Lsass.exe は通常、100 MB から 300 MB のメモリを使用します。 Lsass.exe は、コンピューターにインストールされている RAM の量に関係なく、同じ量のメモリを使用します。

変数コンポーネントは、データベース バッファー キャッシュです。 キャッシュのサイズの範囲は、1 MB 未満からデータベース全体のサイズまでです。 キャッシュが大きいほどパフォーマンスが向上するため、AD (ESENT) のデータベース エンジンはキャッシュをできるだけ大きく保といます。 キャッシュのサイズはコンピューターのメモリ不足によって異なりますが、キャッシュの最大サイズは、コンピューターにインストールされている物理 RAM の量と使用可能な仮想アドレス空間 (VA) の量の両方によって制限されます。 AD では、キャッシュの合計 VA 領域の一部のみが使用されます。

解決方法

次のリソースが枯渇しているかどうかを判断し、基になる原因を修正します。

  • 物理 RAM
  • ページング ファイル
  • ページ プールまたは非ページ プールの枯渇

LSASS 仮想メモリの断片化

根本原因がメモリでない場合は、メモリ割り当てに使用可能な連続アドレス空間がないために問題が発生する可能性があります。 メモリの断片化により、使用可能なアドレス セグメントが小さすぎて要求を満たできません。

断片化の問題は、16 TB の仮想アドレス空間がはるかに大きいため、64 ビット システムでは明らかではありません。 そのため、ソリューションは、32 ビット ドメイン コントローラーを DC で実行されている 64 ビット ハードウェアと 64 ビット バージョンのオペレーティング システムに置き換えています。

ドメイン コントローラーのスケーラビリティ

明らかなメモリ リークまたはリソースの枯渇がない場合:

NTDS のサイズを確認します。ドメイン コントローラー上の DIT ファイル。サイズが 32 ビット ドメイン コントローラーで 2 GB を超える場合は、64 ビットオペレーティング システムとハードウェアに移行することが考えられます。

管理者が x64 ビット ハードウェアに移行し、8446 (レプリケーションがメモリの割り当てに失敗しました) エラーの繰り返しに直面していない場合が多数あります。

NTDS のサイズに応じて、32 ビット オペレーティング システムの場合。DIT では、ドメイン コントローラーの仮想モード アドレス空間を増やす /USERVA boot.ini スイッチによって軽減される場合がありますが、カーネル モードアドレス空間のサイズが小さくなり、カーネル モードが枯渇する可能性があります。 /UserVA スイッチを実装する前に、カーネル モードとユーザー モードのメモリ使用量の分析については、Windows メモリ パフォーマンス チューニング エキスパートに問い合わせておくことをお勧めします。 データベース キャッシュは、LSASS プロセスで使用可能なすべての仮想メモリを使用します。
データベース カウンターパフォーマンス モニター実行し、次のカウンターを確認します。

  • LSASS - ワーキング セット
  • LSASS - 仮想バイト数
  • データベース - "データベース キャッシュ サイズ"

注:

既定では、Windows 2003 ドメイン コントローラーでデータベース カウンターを表示することはできません。 次の手順を使用して、Windows Server 2003 にデータベース カウンターを追加します。

これらの手順は、Window Server 2008 以降では必要ありません。

  1. 次のレジストリ設定をインポートします (次のテキストをメモ帳にコピーし、.reg ファイルとして保存してから、DC の設定をインポートします)

    Windows レジストリ エディター バージョン 5.00
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ESENT]
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ESENT\Performance]
    "Open"="OpenPerformanceData"
    "Collect"="CollectPerformanceData"
    "Close"="ClosePerformanceData"
    "Library"="C:\\Windows\\System32\\esentprf.dll"
    "Show Advanced Counters"=dword:00000001

  2. コマンド プロンプトから次のコマンドを実行して、既存のパフォーマンス カウンターをバックアップします。 Lodctr /s: backup.ini

  3. コマンド プロンプトから次のコマンドを実行して、データベース カウンターを登録します。 Lodctr c:\windows\system32\esentprf.ini

    Perfmon を開くか、既に開いている場合はパフォーマンス モニターを再起動します。

    これで、Perfmon で Database という新しいパフォーマンス オブジェクトを表示できるようになります。

    "データベース キャッシュ サイズ" カウンターを追加します。 次の例では、データベース キャッシュ サイズは、LSASS プロセスの仮想バイト数とワーキング セットの増加傾向で増加し、最終的には LSASS プロセスに割り当てられた 2 GB の使用可能な仮想メモリをすべて消費します。 この仮想アドレス空間が使用されると、8446 レプリケーションエラーが発生します。 この条件を回避する方法の詳細な手順については、記事の「LSASS ESE データベース キャッシュは既定では制限されません」セクションを参照してください。

    増加傾向にあるデータベース キャッシュ サイズのスクリーンショット。

LSASS ESE データベース キャッシュは既定では制限されません

パフォーマンス モニターを使用してメモリを消費しているデータベース キャッシュであると判断した場合は、次のレジストリ値を追加してデータベース キャッシュを制限できます。

ESE キャッシュ割り当てを制限するための "EDB 最大バッファー数" レジストリ値 (ページ数は 8912 バイト) を使用して、条件を回避できます。

値の名前: EDB 最大バッファー数
型: reg_dword
設定:<以下の値を参照してください>
レジストリ キー:HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters

注意

最適な値をレジストリ値 (EDB 最大バッファー) に設定していることを確認します。キャッシュの制限が低すぎると、パフォーマンスが低下する可能性があります。 /3 GB boot.ini スイッチが使用されているかどうかに応じて、最適化の開始として次の値を適用できます。

/3 GB スイッチなし: "EDB max buffers",Reg_DWord: 157286 (1.2 GB);予想される LSASS 使用量 ~1.5 GB /3 GB スイッチ: "EDB max buffers",Reg_DWord: 235929 (1.8 GB);予想される LSASS 使用量 ~2.1 GB

データ収集

Microsoft サポートからの支援が必要な場合は、「 Active Directory レプリケーションの問題に TSS を使用して情報を収集する」で説明されている手順に従って情報を収集することをお勧めします。