跟踪高Windows Server CPU利用率

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

问题在于,大约1-2周前开始,taskmgr.exe开始显示CPU负载总量的60%,在其8个过程中的7个中均匀分布,但是一个过程以100%的速度增长。 而当服务器忙时,服务器就像你期望的那样响应:这是一条狗。 我显然希望找出造成这种情况的原因。

问题在于,每个进程的CPU%(如taskmgr.exe或procexp.exe所示)不会累计到接近100%的地方。 换句话说,系统空闲进程在40%左右,其他一些进程可能会增加10%,但是另外50%来自哪里呢? 换句话说, 有些东西咀嚼了我CPU的50%,而且它并没有在任务pipe理器中的任何地方列出。 (选中“显示来自所有用户的进程”。)

我试过停止所有可能的服务,但是没有一个对CPU有影响。 重新启动服务器并没有什么区别:当我重新login时,CPU再次挂起。 Procexp.exe不显示任何exception。

我可以想到两种可能的解释:(1)某种rootkit已经进入了我的服务器,并且正在隐藏在进程列表中; 或者(2)taskmgr.exe突然(并且是第一次)在盒子的其余部分显示利用率,而不仅仅是这个特定的实例(虽然这看起来不正确)。

任何其他build议,以追查下来?

我看到两个可能的事情,你应该看看。

首先,每当我听到有人谈论高CPU负载,而不能识别任何违规的进程,IO争用是我的第一个猜测。 当IO争用较高时,进程以不可中断的睡眠状态堆栈,向操作系统的进程调度程序填充正在等待数据读取或写入磁盘的任务。 单个进程不会显示CPU负载过高。 您需要查看为该VM提供服务的磁盘子系统的性能统计信息,以查看是否有多个可能的IO瓶颈中的任何一个或多个被命中。

其次,你提到有一个8-CPU的虚拟机。 你确定你需要这么多内核吗? 你确定? 好的,再问一次你是否真的需要他们。 原因在于,在虚拟化环境下,多个内核不能像在裸机上运行一样工作。 只有8个内核可用时,虚拟机才能在主机上获得CPU时间。 如果8个内核不可用,则不会获得CPU周期。 在一个中等负载的主机上,不用说,虚拟机pipe理程序要为8核心虚拟机调度CPU时间比单核虚拟机要困难得多。 出于这个原因,我build议坚持一个单一的核心,除非它是100%绝对必要的应用程序,在这一点上,我可以分配2或在最多4个核心,在这种情况下,我会确保没有其他继续在主机上运行,​​这样虚拟机的性能不会受到影响。

所以 – 你可能有一个rootkit? 当然,可能是这样,你最好做一些尽职调查,以确定是否是这种情况。 如果不是的话,你当然还有其他的东西要看。