25 windows-server-2008 central-processing-unit domain-controller cpu-usage
我们有两个 Windows Server 2008 SP2(遗憾的是不是 2008 R2)域控制器在一个 150 的小型客户端域中,它们表现出非常“峰值”的 CPU 使用率。域控制器都表现出相同的行为,并托管在 vSphere 5.5.0, 1331820 上。 CPU 使用率每两到三秒跃升至 80-100%,然后迅速下降,保持低位一两秒,然后跃升再次。
查看虚拟机的历史性能数据表明,这种情况已经持续了至少一年,但自 3 月以来频率有所增加。
有问题的进程是 SVChost.exe,它包装了 DHCP 客户端 (dhcpcsvc.dll)、EventLog (wevtsvc.dll) 和 LMHOSTS (lmhsvc.dll) 服务。我当然不是 Windows 内部专家,但在使用 Process Explorer 查看进程时,除了 EventLog 似乎触发了大量RpcBindingUnbind调用之外,我似乎找不到任何特别不妥的地方。
在这一点上,我没有咖啡和想法。我应该如何继续解决此问题?
小智 25
TL;DR:EventLog 文件已满。在 Windows Server 2008 中覆盖条目很昂贵和/或没有很好地实现。
在@pk。和@joeqwerty 的建议,在四处询问后,我决定似乎很可能是一个被遗忘的监控实现正在抓取事件日志。
我在其中一个域控制器上安装了Microsoft 的网络监视器,并开始使用ProtocolName == MSRPC
过滤器对 MSRPC 进行过滤。有很多流量,但都在我们远程站点的 RODC 之间,不幸的是没有使用与侦听 EventLog 进程相同的目标端口。该死!有那个理论。
为了简化事情并使运行监控软件更容易,我决定从 SVCHost 解开 EventLog 服务。以下命令和域控制器的重新启动将一个 SVCHost 进程专用于 EventLog 服务。这使调查更容易一些,因为您没有附加到该 PID 的多个服务。
SC config EventLog Type= own
Run Code Online (Sandbox Code Playgroud)
然后我求助于ProcMon并设置一个过滤器来排除所有不使用该 PID 的内容。我没有看到吨的失败尝试通过事件日志,以开放缺少注册表项,表示为一个可能的原因在这里(显然是糟糕的应用程序可以作为一个注册的事件源在极其恶劣的方式)。不出所料,我在安全事件日志 (C:\Windows\System32\WinEvt\Logs\Security.evtx) 中看到了许多成功的 ReadFile 条目。
以下是其中一个事件的堆栈:
您会首先注意到 RPCBinding,然后是 RPCBindingUnbind。有很多这样的。就像每秒数千。要么安全日志真的很忙,要么日志无法正常工作Security.evtx
。
在 EventViewer 中,安全日志每分钟仅记录 50-100 个事件,这似乎适合这种规模的域。该死!第二个理论是,我们有一些应用程序在一个被遗忘的角落左侧打开了非常冗长的事件审计,但仍然尽职尽责地离开。即使记录的事件率很低,仍然记录了很多(约 250,000)事件。可能是日志大小?
安全日志 -(右键单击)- 属性...,最大日志大小设置为 131,072 KB,当前日志大小为 131,072 KB。选中了“根据需要覆盖事件”单选按钮。我认为不断删除和写入日志文件可能是一项艰巨的工作,尤其是当它很满时,所以我选择清除日志(我保存了旧日志,以防我们以后需要它进行审计)并让 EventLog 服务创建一个新的空文件。结果:CPU 使用率恢复到 5% 左右的正常水平。
您可以通过创建一个小的数据收集器集来解决这个问题。
tracerpt –l “file.etl” –of CSV
如果我的预感是正确的,您将看到一些设备(IP:端口)正在攻击您的 DC。
归档时间: |
|
查看次数: |
17025 次 |
最近记录: |