我有一个使用 Windows 2012 R2 的网络服务器,在 ASP.NET 4.5.1、IIS 8.5 上仅运行一个网站。它没有安装 AD 角色,也从未安装过。
上周日,进程 lsass.exe 突然开始占用 20-40% 的 CPU。我们没有对服务器或周围网络进行任何更改。(此时没有发生 Windows 更新)
从那时起,网站逐渐恶化,响应时间越来越长,直到服务器重新启动,一切才恢复正常,但从那时起,它就开始慢慢走下坡路。现在,服务器必须每 4-12 小时重新启动一次,才能保持网站正常运行。服务器上的 CPU 使用率从未达到 100%,而且还有备用 RAM 可用。
从用于监控网站和服务器的 New Relic 来看,请求排队似乎是导致性能不佳的原因,重启后的性能下降从约 100 毫秒增加到几个小时后的 10 秒以上。
我还有其他服务器,使用相同的网站代码,在相同的环境中运行,负载比这台服务器大,但没有出现这种行为。(虽然它们使用的是 WS 2012(不是 R2))
我监控了网络流量,没有发现任何异常。在 Perfmon 中,唯一突出且似乎相关的是“每个进程的安全性统计信息\凭据句柄”,对于 lsass 进程来说,它一直在增加,重启后它只从少数几个开始,运行几个小时后达到 100.000+。没有其他进程这样做,其他服务器上的 lsass.exe 只有几百个“凭据句柄”
查看过去一个月 lsass.exe 进程的图表:
网站响应时间图表,来自 New Relic。每次峰值都需要重新启动,服务器也会在较小的峰值时重新启动,但在图表上不太明显:
关于可能出现什么问题以及如何解决,您有什么建议吗?
编辑:lsass.exe 上 Process Explorer 的 TCP/IP 面板快照
这是 lsass.exe 生成的典型线程的快照,这些线程每秒都会在 Process Explorer 中弹出:
答案1
在 Windows 2012 R2 和 2008 R2 SP1 上启用 TLS 1.2(以及 1.0 和 1.2)后,进程 lsass.exe 开始使 CPU 超载。我使用了 IISCrypto40,单击“最佳实践”,并在“已启用密钥交换”中仅启用 PKCS。之后,CPU 上的负载恢复正常(5-10%)。ps 抱歉我的英语不好 IISCrypto 偏好设置
答案2
检查恶意软件。我将 meterpreter 迁移到 lsass 后,因为这样可以授予我更多权限,从而导致出现此问题。
我还会查看进程资源管理器,看看是否能看到哪些线程导致了 CPU 使用率过高。