为什么Hyper-V,Windows Server 2008 R2服务器偶尔会失速?

我正在Hyper-V上运行一台虚拟机服务器,每周大概停顿一次,有效地使它运行的某些服务变得毫无用处。

– 物理主机

  • CPU:6核Xeon E5-2620 2.10GHz
  • 内存:16GB
  • 操作系统:Windows Server 2008 R2
  • 服务
    • 文件服务
    • Hyper-V的

– 虚拟机

  • 处理器
    • 逻辑处理器:4
    • 虚拟机限制:100
    • 相对重量:100
  • 内存(dynamic)
    • 内存缓冲区:20%
    • 内存重量:高
  • networking适​​配器:此虚拟networking上唯一分配给其自己的端口的虚拟机
  • 操作系统:Windows Server 2008 R2
  • 服务
    • 文件服务
    • 打印和文件服务
    • Web服务器(IIS)
    • Windows Server更新服务

这是症状:

– 当服务器停止时, 我可以

  • Ping服务器
  • 使用PowerShell CmdLets(如Get-Service)查询服务器

– 当服务器停止时, 我不能

  • 通过远程或通过Hyper-Vlogin到服务器。 我可以将Ctrl-Alt-Del命令发送给虚拟机,但在挂载到login屏幕之前会挂起。
  • 连接到服务器上托pipe的networking共享
  • 打印任何东西 假脱机程序被备份,所有打印停止。

我设置了性能警报和数据收集器来跟踪每个进程的处理器时间百分比和总处理器时间百分比。 在失速期间,总处理器时间的平均值约为5%。 我也检查了主机上的内存,总是有至less几个GB可用。

还有其他的VM服务器在同一主机上同时运行。 所有其他虚拟机在失速期间似乎不受影响。

VM服务器最终在10-30分钟的停顿时间后开始正常运行。 我在事件日志中找不到任何相关的错误或警告。 有没有人知道为什么服务器以这种方式停止? 还有什么我可以检查,以缩小问题?

您可以设置性能监视器来logging每个进程使用的内存。 在可用的计数器下,向下滚动到“处理”对象,将其展开。 添加专用字节,工作集和工作集 – 专用。 确保select这样,它会显示每个单独的过程,而不是总数的细目。 这将告诉你每个进程分配的内存,并希望指向你的罪魁祸首。

当内存变得很低时,机器通常不会拖延。 但至less这是你现在可以开始的一个地方。

过去,当虚拟机占用过多的内存,主机已经locking时,我们遇到了问题。 有一种方法可以为Hyper-V预留一些内存来帮助你。 这为我们解决了一些问题。

这里解释registrypath。 这是一个DWORD,应该用MB来指定,例如2048。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\MemoryReserve 

configuration完成后重新启动。

另外,您不介绍您的存储环境。 如果你的虚拟机和主机共享磁盘,这可能会给你带来麻烦。