我们刚刚安装/配置了一个新的Web服务器来替换我们过时的服务器。让我们调用旧服务器'server1'+新服务器'server2'。他们都运行相同的网站,使用相同的代码,但旧服务器仍然比新的服务器更快地提供网页。首先,这里有一些关于服务器规范的更多细节:
Server1 config:
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核Intel(R)Xeon(R)CPU E5620 @ 2.40GHz
服务器版本: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核Intel(R)Xeon(R)CPU E5620 @ 2.40GHz
服务器版本:Apache / 2.2.22(Ubuntu)
主要区别在于server2具有64位操作系统架构,并且还具有更多RAM和CPU功率。
我不了解你,但我希望server2能够击败server1。但是,在提供网页时并非如此。
两个服务器页面加载的开发人员工具输出:
等待时间:314ms
等待时间:5.45秒
正如您所看到的,完全相同的文件请求来自两台机器,但server1仍然占主导地位。
我曾尝试研究可能影响“等待时间”的几个因素,但我在缩短花费时间的方面遇到了很多困难。 我查看了Apache2配置,在两台机器上应用完全相同的指令和模块扩展...对代码进行差异化并验证它是相同的...网络/ ping / nslookup时间几乎相同。
任何人都可以解释究竟如何计算“等待时间”,以及可以用来缩小问题范围的任何做法吗?
非常感谢, 的 NS
答案 0 :(得分: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
不确定/ sbin / route是否通常在64位计算机上执行得更慢(如果是这样,知道原因会很好),或者是否只是应该责备的新操作系统版本。