在两台Web服务器之间诊断页面“等待时间”缓慢的问题

3
我们刚刚安装/配置了一台新的Web服务器来替换我们过时的服务器。让我们称旧服务器为“server1”,新服务器为“server2”。它们都运行着相同的网站,使用相同的代码,但是旧服务器仍然比新服务器更快地提供Web页面。首先,这里有一些关于服务器规格的详细信息:
Server1配置:
Linux server1 2.6.32-25-generic-pae #45-Ubuntu SMP Sat Oct 16 21:01:33 UTC 2010 i686 GNU/Linux MemTotal: 6180036 kB 8 cores Intel(R) Xeon(R) CPU E5620 @ 2.40GHz Server version: Apache/2.2.14 (Ubuntu)
Server2配置:
Linux server2 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux MemTotal: 24682544 kB 16 cores Intel(R) Xeon(R) CPU E5620 @ 2.40GHz Server version: Apache/2.2.22 (Ubuntu)
主要区别在于server2具有64位操作系统架构,并且具有更多的RAM和CPU功率。
我不知道你怎么看,但我希望server2能够击败server1。然而,当涉及到提供网页时,情况并非如此。
两个服务器页面加载的开发者工具输出:
Server1: 等待时间:314毫秒
Server2: 等待时间:5.45秒
正如您所看到的,两台机器都发出了完全相同的文件请求,但是server1仍然占据主导地位。
我尝试查看可能影响“等待时间”的几个因素,但是我很难缩小时间花费的范围。我已经查看了Apache2配置,在两台机器上应用了完全相同的指令和模块扩展...查看了代码并验证了它是相同的...网络/ping/nslookup时间基本相同。
有人能解释一下“等待时间”是如何计算的,并提供可以用来缩小问题范围的方法吗?
非常感谢, ns
1个回答

1

是的,我最终找到了问题的根源。尽管你的问题的解决方案可能与我的非常不同。“等待时间”是一个相当广泛的术语,可以涉及任何在服务器端执行的内容。

在我的情况下,我不得不以一种非常痛苦的方式手动调试代码,通过在代码周围打印大量microtime()语句来确定时间丢失的位置。

事实证明,有一些遗留代码中有一个exec/sbin/route

在原始的32位系统上,这个执行几乎没有任何时间消耗,但从64位机器开始,它需要超过5秒钟:

$ time /sbin/route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.10.10.1       0.0.0.0         UG    100    0        0 eth0

real    0m5.007s
user    0m0.000s
sys     0m0.004s

不确定在64位机器上/sbin/route是否通常执行较慢(如果是这样,那么知道原因会很好),或者只是新的操作系统版本有问题。


在PHP领域中,你可以使用cache grind或其他分析工具来查找瓶颈,不需要使用microtimes。 - Kai Sellgren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接