3

我们刚刚安装/配置了一个新的 Web 服务器来替换我们过时的服务器。让我们称旧服务器“server1”+新服务器“server2”。它们都运行相同的网站,使用相同的代码,但旧服务器提供网页的速度仍然比新服务器快得多。首先,这是有关服务器规格的更多详细信息:

服务器 1 配置:

Linux server1 2.6.32-25-generic-pae #45-Ubuntu SMP Sat Oct 16 21:01:33 UTC 2010 i686 GNU/Linux

内存总量:6180036 kB

8 核 Intel(R) Xeon(R) CPU E5620 @ 2.40GHz

服务器版本:Apache/2.2.14 (Ubuntu)

服务器 2 配置:

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

内存总量:24682544 kB

16 核 Intel(R) Xeon(R) CPU E5620 @ 2.40GHz

服务器版本:Apache/2.2.22 (Ubuntu)

主要区别在于 server2 具有 64 位操作系统架构,并且还具有更多的 RAM 和 CPU 能力。

我不了解你,但我希望 server2 能够击败 server1。但是,在提供网页时情况并非如此。

两个服务器页面加载的开发人员工具输出:

服务器1 等待时间:314ms

服务器2 等待时间:5.45s

如您所见,两台机器发出完全相同的文件请求,但 server1 仍然占主导地位。

我已经尝试调查可能影响“等待时间”的几个因素,但我很难缩小花费时间的范围。我查看了 Apache2 配置,两台机器上都应用了完全相同的指令和模块扩展... 区分代码并验证它是相同的...网络/ping/nslookup 时间几乎相同。

谁能解释一下“等待时间”是如何计算的,以及可以用来缩小问题范围的任何做法?

非常感谢, ns

4

1 回答 1

1

是的,我最终确实找到了它的底部。尽管您的问题的解决方案可能与我的非常不同。“等待时间”是一个相当广泛的术语,可以与在服务器端执行的任何事情相关。

在我的例子中,我不得不以一种相当痛苦的方式手动调试代码,通过microtime()在代码周围打印大量语句来找出时间丢失的地方。

事实证明,有一些遗留代码有一个execto /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

不确定 /sbin/route 是否通常在 64 位机器上执行较慢(如果是这样,很高兴知道原因),或者是否应该归咎于较新的操作系统版本。

于 2012-07-09T14:00:23.557 回答