如何使用 MaxConcurrentApi 设置对 NTLM 身份验证执行性能优化
本文介绍如何使用 MaxConcurrentApi 设置为 NTLM 身份验证执行性能优化。
原始 KB 数: 2688798
简介
企业信息技术消费化增加(企业中使用的智能手机和平板电脑等面向消费者的设备增加)导致企业在企业环境中可能经历大量传统身份验证的情况增加。 旧式身份验证的增加可能会导致性能问题,例如客户端的延迟或超时。
在环境中发现身份验证超时或延迟(也称为 MaxConcurrentApi 瓶颈)时,解决问题的典型方法是提高服务该身份验证的最大允许工作线程数。 为此,请更改 MaxConcurrentApi 注册表值,然后在服务器上重启 Net Logon 服务。
确定哪些服务器是瓶颈的受害者,哪些服务器实际上是瓶颈延迟的来源可能很困难。 本文介绍如何使用 MaxConcurrentApi 设置对 NT LAN Manager (NTLM) 身份验证执行性能优化。 本文包含有关管理员标识要对其引发 MaxConcurrentApi 值的服务器的指南以及应设置该值的量。
解决方法
重要
此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。 有关如何备份和还原注册表的详细信息,请单击下面的文章编号,查看相应的 Microsoft 知识库文章:
322756 如何备份和还原 Windows 中的注册表
若要解决此问题,必须查看从方案中涉及的所有服务器获取的性能数据。 然后,可以尝试在显示性能损失的服务器上增加 MaxConcurrentApi 设置。
报告 Netlogon
NTLM 身份验证问题的事件可用,请参阅:
2654097 Windows Server 2008 R2 中跟踪 NTLM 身份验证延迟和失败的新事件日志条目可用
事件指示两个计数器的活动:
- 事件 5818/5819:如果启用了事件,则存在“信号灯等待程序”。
- 事件 5816/5817:有“信号灯超时”。
若要确定服务器的最佳 MaxConcurrentApi 值,必须使用公式将多个数据点组合在一起并计算。 用于估算 MaxConcurrentApi 的数据如下所示:
- Net Logon 信号灯获取
- Net Logon 信号灯超时
- Net Logon 平均信号灯保持时间
- 完成的性能日志记录的持续时间(以秒为单位)
获取数据后,以下公式可用于估计正确的 MaxConcurrentApi 值:(semaphore_acquires semaphore_time-outs + ) * average_semaphore_hold_time / time_collection_length = New_MaxConcurrentApi_setting <
从服务器处于身份验证加载状态时收集 Net Logon 性能数据后,应通过查看线路视图的开始和结束时间来确定数据收集过程的持续时间。
注意
占位符 semaphore_acquires 和 semaphore_time出 表示在安全通道生存期内发生的超时的累积数。 因此,这些数字很可能不会在收集的数据中从零开始。 在 性能监视器 (Perfmon.msc) 中使用行视图时,必须从结束编号中减去起始数字。 然后,在公式中将此计算数字用于新的 MaxConcurrentApi 设置。 若要确定数据收集期间发生的超时次数,请在 Perfmon.msc 中使用行视图,并将鼠标指针停留在该计数器的末尾和开始处的行上,然后从结束编号中减去起始编号。 结果是要放入公式中的数字。
通过将默认视图从“线条视图”更改为 Perfmon.msc 中的“报表视图”,可以确定平均信号量保持时间。 例如,考虑以下情况:
- 信号灯获取值为 8,286。
- 信号灯超时值为 883。
- 平均信号灯保持时间(
.5
即半秒)。 - 报告的持续时间为 90 秒。
在此方案中,公式如下所示:
(8,286 + 883) *.5 / 90 =< 51
如果从公式派生的值为 150 或更大,则应添加更多服务器来为旧式身份验证加载提供服务。
如果该值小于 150,则应将服务器上的 MaxConcurrentApi 注册表值更改为公式建议的值或更大的值。
注意
如果决定将 MaxConcurrentApi 值增加到大于 10,则应在非生产环境中测试所需设置的负载和性能,然后再在生产环境中实施更改。 建议这样做,确保增加此值不会造成其他资源瓶颈。 此外,请注意,负载条件可能会根据每个方案和业务环境而更改。 因此,如果服务加载更改,MaxConcurrentApi 值在以后的日期可能必须具有不同的设置。
若要更改 MaxConcurrentApi 设置,请执行以下步骤:
单击“开始”,单击“运行”,键入 regedit,然后单击“确定”。
找到并单击以下注册表子项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters
在“编辑”菜单上,指向“新建”,然后单击“DWORD 值”。
键入 MaxConcurrentApi,然后按 Enter。
在 “编辑 ”菜单上,单击“ 修改”。
在十进制中键入新的 MaxConcurrentApi 设置,然后单击“ 确定”。
在命令提示符上,键入以下命令,然后按 Enter:
net stop netlogon
键入以下命令,然后按 Enter:
net start netlogon
详细信息
可以使用以下知识库文章更详细地识别旧式身份验证瓶颈的客户端症状:
975363连接到经过身份验证的服务时,系统会间歇性地提示输入凭据或体验超时。身份验证瓶颈可能位于方案中的多个服务器上。 因此,必须确保给定方案中的所有服务器在忙于处理大量负载时查看其性能数据。
信号灯获取、信号灯超时和平均信号灯保持时间的计数器必须在服务客户端请求所涉及的所有应用程序服务器、域控制器和受信任的域控制器上查看。
服务器负载过大时,必须跟踪性能数据。 当服务器看到大多数客户端请求时,会发生大量负载。 例如,在电子邮件服务器方案中,收集性能数据的最佳时机是用户到达工作并检查其电子邮件。
其他注意事项如下:
没有值意味着不需要任何操作。 信号灯持有者和信号灯保留时间计数器不会显示任何值,除非服务器上存在持续负载。 如果不存在任何值,则无需更改 MaxConcurrentApi 值。
一个大小不适合所有大小。 MaxConcurrentApi 值可能必须是每个服务器的不同值。 这种情况可能是由多个应用程序服务器从单个域控制器获取身份验证,或者由多个服务器提供大量负载的类似情况导致,域控制器必须处理这些负载。
信托。 如果正在进行身份验证的用户来自受信任的域,则可能会导致更长的延迟,因为本地域控制器必须在本地域控制器提供对应用程序服务器的响应之前等待来自受信任域控制器的答复。
网络延迟。 网络延迟还可以在导致 MaxConcurrentApi 瓶颈方面发挥主要作用。 当 MaxConcurrentApi 信号灯使用基于时间的超时计数器,以便客户端不会无限期地等待旧式身份验证时,可能会出现此问题。
搭配。 如果存在网络延迟,导致完成 MaxConcurrentApi 线程时出现延迟和瓶颈,常见的解决方案是将服务器置于同一物理位置,以便降低网络延迟。 例如,在受信任的域具有Microsoft Exchange CAS 服务器的域模型中,用户的域位于另一个区域或 Active Directory 站点中,这意味着将用户的域控制器置于与 Exchange CAS 服务器及其域控制器相同的物理位置和 Active Directory 站点中。
可能的下游延迟。 如果信号灯等待程序计数器值随时持续大于 0(零),并且信号灯持有者值小于该服务器上的 MaxConcurrentApi 设置,则瓶颈不位于该服务器上。 在这种情况下,请查看计数器名称中引用的域控制器,该计数器名称被列为主机完全限定的域名。 应查看该域控制器的信号灯等待器和信号灯持有者的性能数据。
负载或网络配置中的更改。 正在提供服务的负载或网络配置中的将来更改可能会导致网络延迟,并可能导致需要再次检查正确的 MaxConcurrentApi 设置。 对于旧式身份验证卷在检查 MaxConcurrentApi 设置的范围内看到的环境,强烈建议你持续监视和查看 Net Logon 性能对象计数器。 可以使用计划的自定义 Perfmon.msc 数据收集器、Microsoft System Center Operations Manager 或其他方法执行此操作。
Windows Server 2008 最大值。 在 Windows Server 2008 和更高版本的 Windows 中,MaxConcurrentApi 允许的最大设置是 150。 如果正在使用的服务器未运行 Windows Server 2008 R2,请应用以下知识库文章中所述的修补程序,以获得 150 个可用设置:
975363连接到经过身份验证的服务时,系统会间歇性地提示输入凭据或体验超时Windows Server 2003 最大值。 Windows Server 2003 和早期版本中 MaxConcurrentApi 允许的最大设置为 10。
Windows Server 2012 和更新的默认值。 Windows Server 2012 中已更改 MaxConcurrentApi 的默认值。 对于成员服务器和域控制器,它为 10。 对于成员工作站,它仍为 1。
Windows Server 2003 和性能计数器。 Windows Server 2003 的原始版本不包含 Net Logon 性能计数器。 可以应用修补程序来添加它。
如果要减少总体 NTLM 身份验证负载,从而最终减少 MaxConcurrentApi 信号灯使用的数量,则识别执行重复和连续 NTLM 身份验证的未授权或未知客户端或服务可能很有用。 可以通过使用 Net Logon 服务调试日志记录来识别重复身份验证。 有关如何使用 Netlogon.log 文件调试 Net Logon 服务的详细信息,请单击以下文章编号以查看Microsoft知识库中的文章:
109626为 Net Logon 服务启用调试日志记录
安全系统范围统计信息对象下 NTLM 身份验证的 Perfmon.msc 计数器不是 MaxConcurrentApi 跟踪线程的使用次数的反映。 Net Logon 性能计数器中显示的 MaxConcurrentApi 信号灯使用情况与 NTLM 身份验证计数器增量之间没有一对一关联。 NTLM 身份验证计数器在确定最佳 MaxConcurrentApi 值时没有用处。
此外,可能会看到与 MaxConcurrentApi 相关的旧式身份验证性能超时,但不会反映在除 Net Logon 计数器以外的任何性能计数器中。 这意味着,即使 MaxConcurrentApi 负载很重且用户遇到问题,其他性能指标(如 CPU 使用和磁盘和网络使用)可能不会显示负载。
可以在具有其 Net Logon 服务调试日志中的条目的域控制器上执行额外的最小化过程,这些条目指示客户端正在提交而不是domainname\username
提交<null>\username
。 Microsoft知识库的以下文章介绍了此过程:
923241如果 Active Directory 域控制器上存在许多外部信任,Lsass.exe进程可能会停止响应