我们有一台运行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:
感谢迄今为止的所有答复。 更多信息:
硬件:
OS:
高级性能选项:
(系统属性>高级>性能>设置>高级)
更新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罪魁祸首。