Hyper-V主机系统上的CPU只是闲置,即使虚拟机处于全速运行状态

我有一台运行Windows 2008 64位Hyper-V的服务器,它具有8个内存和Intel Xeon X3440 @ 2.53 Ghz,在主机系统的性能监视器上提供了8个逻辑内核。

我已经build立了三台虚拟机,全部运行Windows 2008 32位。

  1. build立服务器,运行Team City
  2. 登台服务器
  3. SQL Server,运行SQL Server 2005

这三台机器运行非常缓慢,即使主机系统几乎没有使用任何cpu,一般都低于10%,但CPU仍然是100%cpu。

任何人都可以请提供一些关于CPU分配的最佳设置的提示? 我应该设置每个服务器有两个核心,还是应该增加这个数字超过主机上的核心总数?

什么是在虚拟机预留和虚拟机限制上设置的好数字?

8台物理内存不足3台虚拟机?

谢谢阅读。 🙂

比约恩,你担心的事情不是问题。 在你的情况下,你有一个pipe理程序和四个虚拟机。 pipe理程序随附有一个虚拟机(pipe理OS)。 然后,您安装了三个虚拟机。

问问自己是否希望使用CPU时间查看pipe理操作系统。 理想情况下,您希望将尽可能多的CPU时间留给您设置的三台虚拟机。

这正是Hyper-V所做的,假设您已经在所有虚拟机中安装了“VM集成组件”。 这些组件通过安装适用于VM的驱动程序,使I / O更加高效。 然后,除非您的虚拟机特别是I / O很重,否则您的pipe理操作系统将会坐在那里等待您与之交互,尝试尽可能less地使用资源。 这是一件好事。

如果要查看pipe理程序中的实际CPU指标,而不是pipe理操作系统,请在pipe理操作系统中使用性能监视器,然后查找Hyper-V计数器。 这些会告诉你关于物理CPU的使用情况。

Doug Luxem(似乎对此有所了解)今天在另一个主题上回答了这个问题。 所以我只是偷了他的文字:

首先,你必须记住,在Hyper-V中,“主机”被称为父分区,它实际上就像具有特殊权限和angular色的虚拟客户机一样。 就像任何其他子/客户一样,当您打开任务pipe理器时,您将无法看到服务器上其他子项的CPU使用情况。

Ben Armstrong在这里有一个很好的解释: http : //blogs.msdn.com/virtual_pc_guy/archive/2008/02/28/hyper-v-virtual-machine-cpu-usage-and-task-manager.aspx

最后,看看虚拟机中的RAM使用情况。 看看磁盘队列长度。 这些会告诉你,如果你需要更多的RAM。 这听起来,虽然,就像你的虚拟机只需要比主机必须提供更多的总CPU。

我不记得100%如何工作,但看看以下

我相信Hyper-V操作系统(主机操作系统,如果你愿意)只是一个shell,不正确地显示这些计数器,无论如何不perfmon。 也可能是它只显示主机操作系统本身正在使用的内容,而不是虚拟机。

从我使用Hyper-V开始已经有一段时间了,但是我认为这是你所看到的底线。

祝你好运

好吧,就像有人在运行大量的虚拟机一样;)

  • 记忆不是问题,相当明显。 Ou必须在主机端(即全部)观看IO,并且在VM端,但是如果你设法在虚拟机内分配100%的CPU – 很明显,它不会对光盘进行分配,也不会使用分配的CPU插槽。 不要说更多的内存不是有用的,但是就像一台物理计算机一样 – 进入虚拟内存的虚拟机将无法充分利用所有分配的CPU周期。

  • 你说CPU是100%,但主机几乎没有凸出。 主机有多less个CPU核心? 这是一个4核心的超线程系统(暴露8个核心 – 对不起,我完全是一个AMD的家伙),一个使用两个100%核心的虚拟机只会显示为-25%,以启动主机。 这已经假设您使用正确的方法来测量CPU利用率,从(prpoer Hyper-V计数器,或Hyper-Vpipe理器的一个简短的想法)开始。 8 CORE主机上的一个核心服务器CAN – 物理上 – 只能用12.5%的可用CPU功率开始。 如果这使得虚拟机从内部缓慢(这可能是 – 取决于VM内部CPU优先级),那么 – 这就像一个正常的计算机过载,但主机几乎看不到它。

因此,3台虚拟机和8台核心CPU对于每台主机使用1个虚拟CPU毫无意义。 基本上,虚拟机的大部分处理器电源都不可用。 如果你在每台服务器上使用双核心服务器(假设服务器和进程从中获益),这会给你带来更好的使用效果。 说,你可能会走得更高 – 取决于如何分配负载(SQ LServer做了很多,而其他服务器正忙?)。

举个例子 – 我的一台机器是32GB的AMD Opteron系统(很快就是64GB)。 我很less拿到CPU完全加载(只有4核心) – 只是因为我运行了十几台服务器,大多数不是在同一时间忙,或轻负载系统(例如多个DNS)。 我有另外一台服务器,TFS(女士相当于TeamCity)运行,如果我有一些行动 – 事情变得讨厌。 构build,unit testing,计划的虚拟机实验室testing,数据库unit testing – 都占用了大量的CPU能力。 取决于这个CAN请求者多忙的CPU功率。 如何购买主要是“多less用户”的事情 – 2-3开发人员很less保持服务器大部分时间忙。

所以,即使你为TeamCity分配了多个核心 – 你会不会同时进行多个编译? 如果有一个开发人员在办理登机手续,他根本不会同时在两个项目中办理登机手续;)但是试试看)

好的,到目前为止我所做的是:

分配给每台服务器的内存:2300,2300和2000兆。 这就在主机和每个虚拟机上留下了一点空闲的内存。

每个服务器上有4个虚拟处理器 在任何时候,它的大部分是两台服务器工作,SQL服务器连同构build服务器,或与登台服务器。 所以这意味着大多数情况下,8个虚拟处理器一次会很忙,而最后4个虚拟处理器没有那么多。

所有虚拟机上的虚拟机预留设置为0。 虚拟机限制在所有虚拟机上设置为100%。

在拼命试图让CPU忙,我已经把虚拟机的工作进程设置为主机上的实时优先级。

主机上的CPU读数仍然非常低,但是现在它们在虚拟机上并没有那么激烈,而且看起来更加敏感。

这是关于Hyper-V和CPU使用情况的简短而好的文章。 我将把解释留给文章。

此外,从VM获得最佳性能的最佳实践是确保您具有逻辑到物理内核的1:1映射。 所以如果你有3个虚拟机和8个内核,你可以在所有虚拟机上做2个逻辑CPU,剩下两个用于虚拟机pipe理程序/主机。

增加物理号码以上的逻辑号通常是一个坏主意。

另一种提高性能的方法是设置静态VHD或通过磁盘。

对于大多数虚拟机中的三个来说,8 GB的内存应该足够了,但是这一切都取决于应用程序的运行以及他们希望以最佳方式工作的程度。 检查每个文件。

希望这可以帮助。