如何诊断Windows挂起 – 哪些资源被阻止?

我们有一台运行Apache / php / postgres的Windows 7 Pro机器,在恒定负载(每秒几个)下处理Ajax请求。 它也运行各种其他应用程序,执行大量的磁盘写入。

通常在一秒钟内接收到Ajax响应,但是偶尔(在一个24小时内一次)在15秒内没有响应被发送,然后它们全部被发送,即它看起来服务器被阻塞长达15秒。 这会导致Ajax在客户端超时。

从Apache和其他应用程序的日志logging了这一点。 Perfmon显示了各种计数器下降到零/接近零 – 高清活动,CPU活动,networking活动等httpd#1似乎是仍然有一些CPU活动,虽然减less的唯一过程。

我怎样才能确定挂起的原因? 可以perfmon或其他工具告诉我什么资源阻塞? (“Windows性能工具包”或“进程监视器”对此是否有用?)

NB Apache有充足的线程,postgres充足的连接,CPU和内存没有超出,我们已经尝试了电源选项,驱动程序,SFC / SCANNOW,CHKDSK / R,MEMTEST等。

更新22/03/2013 10:26:

感谢迄今为止的所有答复。 更多信息:

硬件:

  • 机箱:Westek 2U机架式主板:Intel Q35 1333FSB(5xPCI,2xPCI-E,SATA II I / F,VGA I / F,2xRS232等)
  • RAM:2x 2GB DDR2 PC2-5300非ECC CL4 240针内存模块(3GB可用作32位操作系统)
  • 处理器:Intel Core2 Quad Q9550.2.83GHz 1066FSB 12MB Cache
  • 存储:2个日立320GB SATA 16MBcaching7200 NCQ SATA-II RAID盒 – 英特尔Raid 1,NTFS
  • 电源:2x 400W PSU – 双冗余
  • 调制解调器:StarTech外置v.92 56k USB传真调制解调器
  • PCI卡:电话卡

OS:

  • Windows 7 Pro SP1 32位

高级性能选项:

(系统属性>高级>性能>设置>高级)

  • 处理器调度:程序的最佳性能
  • 虚拟内存:自动pipe理所有驱动器的页面文件大小
    • 所有驱动器的总页面大小:
    • 最低允许:16 MB
    • 推荐:4591 MB
    • 目前分配:3061 MB

更新22/03/2013 11:46:

来自perfmon的屏幕截图:

http://i46.tinypic.com/fndyit.png (我没有足够的声望将其embedded到post中)

服务器无响应的时间是07:44:15 – 07:44:22,而CPU下降到20%以下。 (注意,这是来自另一台服务器的CPU较弱和较旧的未优化软件 – 通常CPU不是这么高!)

更新04/04/2013 16:53:

我们发现了罪魁祸首 – 硬盘。 只花了一个月!

我们如何到达:

进程监视器确认磁盘在事件发生期间的所有写入都被阻塞。 我们首先尝试更新RAID驱动程序。 这个改进的东西 – CPU等不会完全降到零,但磁盘仍然阻塞。 然后,我们尝试禁用RAID – 这没有效果。 我们尝试通过禁用各种日志logging来减less磁盘使用,这有所帮助。 然后,我们尝试用另一个(较低的规格)交换硬盘,使用第一个硬盘的图像,问题完全消失。

那么我们的硬盘有什么问题?

我们使用的磁盘是“Hitachi TravelStar 7k500(增强版本)”。 看起来,占空比已经被限制,以确保该模型的“增强可用性”,这可能不适合于特别重的磁盘使用。 根据资源监视器,我们的磁盘使用量约为400KB /秒。

是的,Perfmon可以监控几乎所有的性能。 问题是你需要知道在哪里看。 默认值是一个很好的起点,但是对于真正的问题,你需要投入一些工作来弄明白。

假设本地存储,请检查PhysicalDisk \ Avg。 在PerfMon中的磁盘队列长度。 如果它高于你的主轴数量,你的存储系统是一个(或者)瓶颈。 也为我们描述你的硬件。

/编辑你去了。 你的磁盘队列的长度往往比你所说的“2”(你所拥有的慢主轴的数量)大得多,并且在你指定的时间段内处于这个水平。 CPU使用率下降,可能是因为它正在等待IO,不能做任何事情,所以它等待。

潜在的改进:

  • 天真地,将存储移动到更多和/或更快的磁盘。 RAID 10也许。

  • 更聪明 – 基准是什么打击磁盘系统,并将其分割到不同的主轴上,或完全不同的服务器上。 通常,不希望网站或其他前端与SQL数据库后端共享太多的资源; 这两种types的过程具有非常不同的性能特征。

这听起来像一个存储问题。 你使用什么样的存储页面文件?

否则,我知道诊断这类问题的最佳工具是sysinternals(MS现在)的procmon 。 它能够执行长时间的会话,但是当遇到问题时,您必须有一种方法来确定确切的时间范围,特别是如果您要使用完整的系统监视器。 如果这不是一个页面文件的问题,那么它很可能会让你find罪魁祸首。