AD DS 性能优化的内存使用注意事项

本文介绍了本地安全机构子系统服务(LSASS,也称为 Lsass.exe 进程)的一些基础知识、LSASS 配置的最佳做法以及对内存使用的预期。 本文应用作分析域控制器 (DC) 上的 LSASS 性能和内存使用情况的指南。 如果你对如何优化和配置服务器和 DC 以优化此引擎有疑问,可参考本文中的信息。

LSASS 负责本地安全机构 (LSA) 域身份验证管理和 Active Directory 管理。 LSASS 处理客户端和服务器的身份验证,还管理 Active Directory 引擎。 LSASS 负责以下组件:

  • 本地安全机构
  • NetLogon 服务
  • 安全帐户管理器 (SAM) 服务
  • LSA 服务器服务
  • 安全套接字层(Secure Sockets Layer,SSL)
  • Kerberos v5 身份验证协议
  • NTLM 身份验证协议
  • 加载到 LSA 中的其他身份验证包

Active Directory 数据库服务 (NTDSAI.dll) 与可扩展存储引擎(ESE,即 ESENT.dll)一起工作。

下面是 DC 上的 LSASS 内存使用情况的可视化图:

Diagram of the components that use LSASS memory

LSASS 在 DC 上使用的内存量根据 Active Directory 使用情况而增加。 查询数据时,它被缓存在内存中。 因此,正常情况下,LSASS 使用的内存量大于 Active Directory 数据库文件 (NTDS.dit) 的大小。

如图所示,LSASS 内存使用可分为几个部分,包括 ESE 数据库缓冲区缓存、ESE 版本存储等。 本文的其余部分介绍了上述每个部分。

ESE 数据库缓冲区缓存

LSASS 中最大的可变内存使用量是 ESE 数据库缓冲区缓存。 缓存的大小范围可以从不到 1 MB 到整个数据库的大小。 由于较大的缓存可以提高性能,因此 Active Directory 的数据库引擎 (ESENT) 会尝试尽可能大地保留缓存。 虽然缓存的大小因计算机中的内存压力而异,但 ESE 数据库缓冲区缓存的最大大小仅受计算机中安装的物理 RAM 的限制。 只要没有其他内存压力,缓存就会增长到 Active Directory NTDS.dit 数据库文件的大小。 可缓存的数据库内容越多,DC 的性能就越好。

注意

由于数据库缓存算法的工作方式,在数据库大小小于可用 RAM 的 64 位系统上,数据库缓存可以增长到比数据库大小大 30% 到 40%。

ESE 版本存储

ESE 版本存储(上图中的红色部分)使用可变内存。 使用的内存量取决于你使用的是 Windows Server 2019 还是更旧版的 Windows。

  • 在 Windows Server 2019 之前的 Windows Server 版本中,默认情况下,LSASS 可能会在 64 位计算机上为 ESE 版本存储使用多达大约 400MB 的内存(具体取决于 CPU 的数量)。 若要详细了解如何使用版本存储,请参阅 Ryan Ries 的以下 ASKDS 博客文章:调用版本存储后用光了 Bucket

  • 在 Windows Server 2019 中,这得到了简化。当 NTDS 服务首次启动时,ESE 版本存储大小现在计算为物理 RAM 的 10%,最小为 400MB,最大为 4GB。 有关此问题和版本存储故障排除的详细信息,请参阅 Ryan Ries 的另一篇精彩博客:深入探讨:Server 2019 中的 Active Directory ESE 版本存储更改

其他内存使用

最后还有代码、堆栈、堆和各种固定大小的数据结构(例如架构缓存)。 LSASS 使用的内存量可能因计算机上的负载而异。 随着正在运行的线程数的增加,内存堆栈的数量也会增加。 对于这些固定组件,LSASS 平均使用 100 MB 到 300 MB 的内存。 当安装了更大的 RAM 时,LSASS 可以使用更多的 RAM 和更少的虚拟内存。

限制或尽量减少域控制器上的程序数量,或者在适当的情况下添加额外的 RAM

为了获得最佳性能,LSASS 在给定的 DC 上占用尽可能多的 RAM。 LSASS 会在其他进程要求该 RAM 时放弃该 RAM。 其思路是优化 LSASS 的性能,同时仍然考虑可能在计算机上运行的其他进程。 要监视的程序列表包括监视代理。 一些客户为各种服务器功能提供了单独的代理,这可能会消耗大量 RAM 资源。 一些客户可能会发出许多 WMI 查询,我们在下面提供了一些相关的详细信息。

因此,为了提高性能,最好限制或最小化 DC 上的程序数。 如果没有内存请求,LSASS 将使用此内存来缓存 Active Directory 数据库,从而实现最佳性能。

当你注意到 DC 存在性能问题时,还要注意内存利用率高的进程。 它们可能存在需要进行故障排除的问题。 它们可能包括 Microsoft 组件。 请确保跟上最近的服务更新 - Microsoft 在质量更新中包括了针对内存过度使用的解决方案,它们也可能有助于提升你的 DC 性能。

有一些内置 OS 设施可能会消耗大量 RAM,具体取决于使用情况配置文件:

  • 文件服务器。 DC 也是 SYSVOL 和 Netlogon 共享的文件服务器,为策略和启动/登录脚本提供组策略和脚本服务。 但是,我们看到客户使用 DC 为其他文件内容提供服务。 SMB 文件服务器随后会消耗 RAM 来跟踪活动客户端,但最重要的是,文件内容会使 OS 文件缓存增长,并与 ESE 数据库缓存竞争 RAM。

  • WMI 查询。 监视解决方案通常会进行许多 WMI 查询。 单个查询的执行成本可能很低。 通常情况下,调用量会产生一些开销,尤其是在监视解决方案从 Windows 管理的各种事件日志中提取新事件时。

    产生最多量的事件日志通常是安全事件日志。 这也是安全管理员想要收集的事件日志,尤其是来自 DC 的事件日志。

    WMI 服务使用动态内存分配方案来优化查询。 因此,WMI 服务可能会分配大量内存,再次与 ESE 数据库缓存竞争。