我注意到我设置的一台新服务器比现在的服务器慢,并且做了一些压力testing/基准testing来研究这个问题。
但是经过testing,我得到了矛盾的结果。
机器细节:
CentOS-6.4 (i386) Apache 2.4.4 PHP 5.4.17 mySQL 5.6.12 8GB RAM No cache
这是一个Joomla网站。
一个注意:这台机器目前只能通过VPN访问(这可能与缓慢有关)
在做testing之前,我重启了httpd和mysql。
浏览:
这是慢的(不仅仅是感觉 ,它浏览时确实比任何浏览器types(Safari,Firefox,Chrome,IE)慢,我没有时间,但它比当前的网站慢,没有任何其他用户在那里)。
通过Joomla进行debugging:
我打开了主页的debugging,平均需要1.294秒(通过该debugging的日志),而在当前的服务器(相同的configuration,但与CentOS 6.3和PHP 5.3)testing平均需要0.762秒。
AB:
我同时尝试了5个用户,做了1000个请求,这是从另一台机器完成的。
我真的很喜欢这个,因为对于一个静态文本文件或简单的echo ea PHP,它给了我这个:
Connection Times (ms) min mean[+/-sd] median max Connect: 3 5 1.7 5 17 Processing: 4 7 1.5 6 20 Waiting: 4 6 1.5 6 19 Total: 8 11 2.5 11 27
和Joomla主页:
Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.3 0 9 Processing: 321 423 115.8 403 1737 Waiting: 309 406 114.0 386 1706 Total: 322 423 115.9 403 1737
无论如何,这比我浏览时(testing1)的时间大于1秒。
jmeter(2.9):
我做了5个并发用户的testing,用2秒的时间做了100个请求。
静态页面给了我这个平均值:
label # Samples Average Median 90% Line Min Max Error % Throughoutput KB/sec TOTAL 500 8 8 11 7 21 0.0 92.66123054114159 36.55051195329874
网页给了我这个:
label # Samples Average Median 90% Line Min Max Error % Throughoutput KB/sec TOTAL 500 445 436 507 366 969 0.0 10.331645831180907 856.8125096859179
最后,这个问题:
为什么浏览速度很慢,知道压力testing( ab或者jmeter )给了我更快的结果? (这个testing是否足够,还是应该尝试其他的东西?)
(我不知道这里的VPN是否有问题,但是这并不能说明浏览速度和testing速度,都需要连接到VPN)。
我怀疑答案在于浏览器所做的事情, jmeter和ab没有。
即cookies,和JavaScript(和图像,在一定程度上)。
同样,我认为你的基准testing并不能真正代表真正的浏览。
当我访问一个网站,我不去主页,并重新加载页面。 我去点击很多不同的东西。 这里的重要区别是,如果你的服务器设置正确,那么很多生成的PHP操作码,生成的页面碎片等都会进入内存,所以第一个命中是慢的,但是后面的所有操作都很快。
你应该试着find一种模拟“真实世界”浏览的方法。 我头脑中的一个想法是运行Selenium IDE,在浏览时logging击键和点击,然后能够在多个主机上一次又一次地重放它们。
VPN可能是负责任的,但理论上这两种types的连接都会导致更大的开销, ab et al。 和浏览器。
我怀疑,如果你在服务器上运行tcpdump / wireshark / ngrep等,你会发现加载的页面资源比浏览器要less得多。
用像“YSLOW”这样的工具检查你的页面,这可能会提示timelags开始的提示。
我总是检查mysql的slow_queries,并使用调优脚本来评估,如果你的瓶颈是你的分贝。 如果没有 – >(你已经)用一个简单的静态文件检查你的web服务器的裸机性能; 然后用ab; 然后用浏览器和一些webmaster-plugins来调查整个页面。
正如汤姆所说,你应该模拟真实的浏览器行为。 对于JMeter来说,这非常简单: