Windows服务器LSASS.exe高CPU占用排查及资源规划咨询
环境与问题背景
我们有两台部署于AWS的Windows Server 2012 R2服务器(非域控制器,IIS 8.5),托管3个ASP.NET站点与1个WordPress站点,配置如下:
- 服务器1:8GB内存、2vCPU(2.40GHz E5-2676 v3)
- 服务器2:4GB内存、2vCPU(2.30GHz E5-2686 V4)
核心症状
- LSASS.exe(本地安全授权进程)时常占用极高CPU,整体CPU使用率最高达100%;停止IIS服务后CPU使用率降至10%以下,重启IIS站点则再次升高。
- 已排除Active Directory关联问题(未启用AD角色),正在通过KB更新升级lsass.exe/lsasrv.dll版本(当前版本6.3.9600.17415)。
已完成排查
- 逐一启停站点未定位到特定触发站点;IIS日志显示LSASS高CPU时段流量激增:服务器1从约1000请求/分钟升至4500+请求/分钟,服务器2从500-1000请求/分钟升至2200+请求/分钟。
- 事件日志存在4625(无效登录尝试)、4797(空白密码检查)、36874/36888(SChannel/TLS错误)等事件,但正常时段也有记录;IIS、FTP日志无异常,SQL日志出现18056错误(客户端无法复用会话)。
- 服务器启用Symantec Endpoint Protection多项防护功能及Windows防火墙,IIS采用匿名认证;AWS Lightsail基础DDoS防护已启用,服务器1更新至KB2896496(2018年),服务器2更新至KB4338331(2018年)。
- 2022-08-05通过Debug Diagnostic工具分析lsass.exe dump,发现线程处理
lsasspirpc端点的LRPC入站调用,堆栈信息:
*ntdll!NtWaitForWorkViaWorkerFactory+a ntdll!TppWorkerThread+746 kernel32!BaseThreadInitThunk+22 ntdll!RtlUserThreadStart+34*
- 2022-09-01拟升级服务器规格缓解高CPU问题;2022-09-08已更新服务器1CPU规格。
负载测试结果(Jmeter:1000用户、10秒Ramp Up、循环1次)
- Windows Server 2012 R2(IIS8.5)的HTTPS ASPX站点中,LSASS.exe占用约26%CPU;
- 同配置Windows Server 2019(IIS10)的相同站点,LSASS.exe CPU占比一致;
- Apache托管的HTTPS站点未使用LSASS.exe。
问题解答
1. 该测试负载下LSASS.exe的26%CPU占用是否正常?
在IIS+HTTPS的Windows环境中,LSASS会参与安全上下文的初始化与验证——即使是匿名认证,也需要生成匿名用户的安全令牌,这是Windows安全子系统的固有开销。而Apache的SSL处理完全由自身模块完成,不依赖LSASS,因此两者存在差异属于正常现象。
在1000用户短时间负载的测试场景下,2vCPU机器上LSASS占用26%属于可接受的预期范围,且Windows Server 2012 R2与2019的结果一致,说明该占比是IIS架构的特性,而非特定系统版本的问题。但如果生产环境是持续高流量下的长期高占用,则需要进一步排查优化空间。
2. 如何提前计算不同CPU规格下各应用的CPU使用率?
可以通过以下三种实用方法估算:
- 基准换算:先在当前服务器记录不同负载下各进程(LSASS、W3WP、SQL等)的CPU占比基准,再根据目标CPU的核心数、主频对比换算。例如当前2vCPU(2.4GHz)下LSASS占26%,目标为4vCPU(2.5GHz),理论占比约为
(26% * 2*2.4)/(4*2.5) ≈ 12.5%,实际需预留10-15%的多核调度误差。 - 性能计数器建模:用PerfMon采集关键计数器(如
Process\% User Time针对LSASS、W3WP),结合负载指标(请求数、并发数)建立线性关联模型,比如每增加1000请求/分钟,LSASS占用提升X%,再根据目标CPU性能调整模型参数。 - AWS实例性能对比:参考AWS官方的实例性能基准分数,将当前实例与目标实例的分数做比值,相同负载下CPU占用理论上与分数比值成反比。例如当前实例CPU基准分为1000,目标为2000,则相同负载下CPU占用约为原来的50%。
3. 除升级lsass.exe版本外,还有哪些排查方向可定位LSASS.exe高CPU原因?
- 追踪LRPC调用源:针对dump中发现的
lsasspirpc端点,用Process Monitor跟踪LSASS的RPC调用,定位发起高频调用的进程(如W3WP、Symantec防护进程),排查是否存在异常调用逻辑。 - 分析SSL/TLS握手异常:统计高CPU时段的SChannel错误频率,确认是否存在大量TLS握手失败(如客户端协议版本不兼容、证书验证失败)——这类无效请求会导致LSASS反复处理安全验证。可启用IIS的SSL详细日志,记录握手过程的具体错误。
- 排查安全软件影响:Symantec Endpoint Protection的实时防护、行为监控模块可能Hook LSASS进程,产生额外CPU开销。可临时禁用SEP的部分功能,观察LSASS占用变化,逐步定位触发模块。
- 验证IIS模拟配置:即使是匿名认证,若站点impersonation配置异常(如强制使用特定账户模拟),会导致LSASS频繁生成安全令牌。可临时关闭impersonation,测试CPU占用变化。
- 解决SQL会话复用问题:SQL日志的18056错误(客户端无法复用会话)会导致频繁重建数据库连接,若连接使用Windows身份验证(含本地账户),会触发LSASS的凭据验证。检查ASP.NET站点的连接池配置,确保连接复用正常,减少验证次数。
- 监测异常流量:高CPU时段流量激增,需排查是否存在恶意扫描、重复无效请求(如目录遍历、高频匿名请求)——这类请求会触发LSASS的安全检查逻辑。可用Wireshark抓包分析请求特征。
- 简化防火墙规则:复杂的Windows防火墙规则(如大量入站/出站过滤)可能让LSASS参与规则验证,尤其是IIS相关流量。临时简化规则,观察CPU占用是否下降。
内容的提问来源于stack exchange,提问作者IT Researcher143
相关产品推荐
相关产品推荐

