追踪 Windows Server 的高 CPU 利用率

追踪 Windows Server 的高 CPU 利用率

我有一台 Windows 2003 服务器(64 位),作为虚拟机在远程托管设施上运行。(我只是租用了这个特定的虚拟实例,所以我不知道它在什么样的底层硬件上运行,除了它向虚拟机显示有 8 个可用 CPU。)

问题在于,大约从 1-2 周前开始,taskmgr.exe 开始显示总 CPU 负载约为 60%,均匀分布在其 8 个进程中的 7 个上,但其中一个进程的负载高达 100%。服务器的响应就像您在繁忙时所期望的那样:它简直就是个废物。我当然想找出导致这种情况的原因。

问题是,taskmgr.exe 或 procexp.exe 中显示的每个进程的 CPU 百分比加起来都远不及 100%。换句话说,系统空闲进程大约占 40%,其他几个进程可能加起来占 10%,但另外 50% 来自哪里?换句话说,某物占用了我 50% 的 CPU,但它没有在任务管理器的任何地方列出。(已选中“显示所有用户的进程”。)

我尝试停止所有可以停止的服务,但这些服务均对 CPU 没有影响。重新启动服务器也没有任何作用:当我重新登录时,CPU 再次被限制。Procexp.exe 没有显示任何异常。

我能想到两种可能的解释:(1)有某种 rootkit 进入了我的服务器并将其自身隐藏在进程列表中;或(2)taskmgr.exe 突然(并且第一次)显示其余设备的利用率,而不仅仅是这个特定的实例(尽管这似乎不正确)。

还有其他建议可以追踪此事吗?

答案1

我认为有两件事情你应该考虑一下。

首先,每当我听到有人谈论高 CPU 负载,而无法识别任何有问题的进程时,我的第一猜测就是 IO 争用。当存在高 IO 争用时,进程会堆积在不可中断的睡眠状态中,操作系统的进程调度程序中充满了等待从磁盘读取或写入数据的任务。单个进程不会显示为具有高 CPU 负载。您需要查看为该 VM 提供服务的磁盘子系统的性能统计数据,以查看是否遇到了许多可能的 IO 瓶颈中的任何一个或多个。

其次,您提到拥有 8 个 CPU 的虚拟机。您确定需要那么多核心吗?您确定吗?好吧,再问问自己是否真的需要它们。原因是在虚拟化下,多核的工作方式与在裸机上运行的方式不同。只有当主机上有 8 个可用核心时,您的虚拟机才能获得 CPU 时间。如果没有 8 个可用核心,您就无法获得 CPU 周期。不用说,即使在中等负载的主机上,虚拟机管理程序为 8 核虚拟机安排 CPU 时间也比为单核虚拟机安排 CPU 时间困难得多。因此,我建议坚持使用单核,除非应用程序 100% 绝对需要它,此时我可能会分配 2 个或最多 4 个核心,在这种情况下,我会确保主机上没有太多其他事情发生,这样虚拟机的性能就不会受到影响。

那么,您是否有 rootkit?当然,可能如此,您最好进行一些尽职调查来确定是否如此。但如果没有,您肯定还有其他事情要考虑。

相关内容