本文介绍本地安全机构子系统服务(LSASS(也称为 Lsass.exe 过程)的一些基础知识、LSASS 配置最佳做法以及内存使用情况的预期。 本文应作为对域控制器(DC)上的 LSASS 性能和内存使用进行分析的指南。 如果您对如何调整和配置服务器和 DC 来优化此引擎有疑问,本文中的信息可能很有用。
LSASS 负责管理本地安全机构 (LSA) 域身份验证和 Active Directory 管理。 LSASS 处理客户端和服务器的身份验证,它还控制 Active Directory 引擎。 LSASS 负责以下组件:
- 本地安全机构
- NetLogon 服务
- 安全帐户管理器 (SAM) 服务
- LSA 服务器服务
- 安全套接字层 (SSL)
- Kerberos v5 身份验证协议
- NTLM 身份验证协议
- 加载到 LSA 的其他身份验证包
Active Directory 数据库服务(NTDSAI.dll)适用于可扩展存储引擎(ESE、ESENT.dll)。
下面是 DC 上的 LSASS 内存使用情况的可视化图:
LSASS 在 DC 上使用的内存量会根据 Active Directory 使用情况增加。 查询数据时,它将缓存在内存中。 因此,使用大于 Active Directory 数据库文件(NTDS.dit)大小的内存量来查看 LSASS 是正常的。
如图所示,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 最多可以使用 400MB 内存(具体取决于 ESE 版本存储的 64 位计算机上的 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。 其思路是优化 LSASS 的性能,同时仍考虑可能在计算机上运行的其他进程。 要监视的程序列表包括监视代理。 某些客户针对各种服务器功能具有单独的代理,这些代理可能会消耗大量 RAM 资源。 有些人可能会发出许多 WMI 查询,下面我们提供了一些详细信息。
因此,为了提高性能,最好限制或最小化 DC 上的程序数。 如果没有内存请求,则 LSASS 使用此内存来缓存 Active Directory 数据库,从而获得最佳性能。
当你注意到 DC 有性能问题时,还监视内存利用率较高的进程。 这些东西可能有问题,需要进行故障排除。 它们可能包括Microsoft组件。 请确保跟上最近的服务更新——Microsoft在质量更新中包括了解决高内存使用率的解决方案,这也可能有助于提高数据中心性能。
有一些内置 OS 设施可能会消耗大量 RAM,具体取决于使用情况配置文件:
文件服务器。 DC 也是 SYSVOL 和 Netlogon 共享的文件服务器,为策略和启动/登录脚本提供组策略和脚本服务。 但是,我们看到客户使用 DC 来服务其他文件内容。 然后,SMB 文件服务器将使用 RAM 来跟踪活动客户端,但最重要的是,文件内容会增大 OS 文件缓存,并与 RAM 的 ESE 数据库缓存竞争。
WMI 查询。 监视解决方案通常进行许多 WMI 查询。 单个查询的执行成本可能更低。 通常,较大的调用量会带来一些计算开销,尤其是在监控解决方案从 Windows 管理的各种事件日志中提取新事件时。
生成最大卷的事件日志通常是安全事件日志。 这也是安全管理员想要收集的事件日志,尤其是来自 DC 的事件日志。
WMI 服务使用优化查询的动态内存分配方案。 因此,WMI 服务可能会分配大量内存,再次与 ESE 数据库缓存竞争。