域控制器内存占用过高且不释放通常源于ad核心服务异常,需优先排查ntds数据库损坏、磁盘空间不足、lsass进程阻塞及驱动级内存泄漏,并通过事件日志、dcdiag、esentutl和rammap等工具定位根因。

域控制器(Domain Controller)提示内存占用过高且不释放,往往不是普通应用级问题,而是涉及 Active Directory 核心服务、LSASS 进程、NTDS 数据库或系统级驱动的深层故障。这类问题容易被误判为“普通内存泄漏”,但实际可能关联到数据库损坏、磁盘空间不足、服务死锁或安全策略异常等关键环节。
先确认是否真为内存问题,还是目录服务崩溃假象
域控制器内存持续升高,常是症状而非根源。很多情况下,系统显示“内存占用高”,实则是 LSASS 或 NTDS 进程因无法访问数据库而反复重试、堆积未释放句柄或线程,表现为内存不回收。需优先验证底层状态:
- 检查事件查看器中是否有 Event ID 2004(资源耗尽) 或 Event ID 1925/1926(AD 复制失败),尤其关注“Directory Service”和“System”日志
- 运行
net statistics workstation和dcdiag /v,观察是否出现“LDAP bind failed”“RPC server unavailable”等连接类错误 - 用
tasklist /svc | findstr "lsass"确认 LSASS 承载的服务是否包含NTDS;若无,说明 AD 服务未正常加载,内存占用可能是残留进程或诊断工具误报
重点排查 NTDS.DIT 数据库与磁盘健康状况
域控制器内存异常增长最常见诱因是 NTDS 数据库文件(%SystemRoot%\NTDS\ntds.dit)所在磁盘空间不足、权限异常或文件损坏。LSASS 在尝试读写该文件失败后,会持续分配缓冲区重试,造成 Nonpaged Pool 和 Paged Pool 异常增长。
- 远程或本地登录后,打开磁盘管理,确认 NTDS 所在卷(通常是系统盘)剩余空间是否低于 300 MB;Windows Server 对 AD 数据库要求最低预留 512 MB 可用空间
- 用 PowerShell 检查数据库状态:
esentutl /g "C:\Windows\NTDS\ntds.dit" -verbose,若返回“Integrity check… Error -1018”,说明数据库校验失败,存在物理损坏 - 运行
chkdsk C: /f(需重启执行),并检查磁盘是否存在坏道或 SMART 告警;SAN/NVMe 环境还需确认多路径策略是否启用“ONLINEALL”
分析 LSASS 和 NTDS 的内核内存分配行为
普通任务管理器无法反映 LSASS 的内核态内存消耗。需借助专业工具定位池内存(Paged/Nonpaged Pool)是否异常增长:
- 下载并以管理员身份运行 RAMMap,切换至 “Pool” 选项卡,观察 Nonpaged Pool 是否持续 >1.5 GB(尤其在空闲状态下);若同步发现 “Session Pool” 或 “Big Page Pool” 占比异常,大概率是驱动级泄漏(如防病毒软件钩子、备份代理驱动)
- 用 Process Explorer(Sysinternals)右键 LSASS.exe → Properties → “Performance” 标签页,查看 “Private Bytes” 和 “Commit Size” 是否随时间单向增长;若 Commit Size 高达 4 GB+ 且不回落,需怀疑 AD 数据库索引重建卡死或 GC(垃圾收集)阻塞
- 启用内核内存跟踪:
logman start "PoolTrace" -p "Microsoft-Windows-Kernel-Memory" 0x1000000000000000 5 -o pool.etl -ets,运行 10 分钟后停止并用 WPA 分析,聚焦 “PoolAllocations” 表中调用栈含ntdsai!Jet或lsasrv!LsaDoDcPromo的条目
安全模式下验证并执行最小化修复
域控制器不能随意重启或停服,但可借助目录服务还原模式(DSRM)隔离问题:
- 重启进入 DSRM(启动时按 F4 或通过
bcdedit /set safeboot dsrepair设置),登录后运行ntdsutil→activate instance ntds→integrity→quit,验证数据库结构完整性 - 若 integrity 报错,执行
compact(生成压缩副本)或semantic database analysis(语义分析修复),切勿直接运行esentutl /p(强制修复可能导致 USN 回滚) - 退出 DSRM 后,在正常启动状态下禁用非必要服务(如 Windows Defender 实时防护、第三方备份代理),再逐个启用测试,观察内存曲线变化;特别注意是否启用 LDAP Signing Required 策略——过度严格的签名验证会显著增加 LSASS 内存开销











