Mickey Shine Asked: 2012-09-14 19:22:20 +0800 CST2012-09-14 19:22:20 +0800 CST 2012-09-14 19:22:20 +0800 CST 在本地和远程运行 ab 有什么区别? 772 我正在使用 apache ab 对我的站点进行基准测试,我注意到在服务器上运行 ab 和在客户端远程运行 ab 时,响应时间有很大差异。 那么在服务器上运行ab和远程运行ab最大的区别是什么。网络运输消耗的时间是多少? apache-2.2 3 个回答 Voted Best Answer Ben Lessani 2012-09-16T13:57:05+08:002012-09-16T13:57:05+08:00 延迟和网络容量。 我们写了一篇关于使用 Siege(与 AB 非常相似)进行并发/负载测试的好文章,特别提到了本地与远程测试。 你可以在这里阅读完整版本: http://www.sonassi.com/knowledge-base/magento-kb/why-siege-isnt-an-accurate-test-tool-for-magento-performance/ 测试远程服务器几乎没有意义,因为它是并发测试(即可以重复满足多少请求),直接瓶颈是两台机器之间的网络连接。延迟和 TCP/IP 开销使测试远程站点完全没有意义,两台服务器之间的对等点之间最轻微的网络拥塞将立即显示性能下降。因此,真正开始发挥作用的是 TCP 3 次握手的完成速度——被测试的服务器可能正在提供动态页面或静态 0 字节文件——你可以看到完全相同的性能速率,因为连通性是瓶颈。 我们可以使用简单的 ping 来显示这一点。我们的数据中心位于英国曼彻斯特,因此我们将尝试对英国的服务器执行 ping 操作,然后再对美国的服务器执行 ping 操作,并显示差异。两台服务器都通过 100Mbit 连接连接到互联网。 从英国 Ping 到英国 [~]$ ping www.bytemark.co.uk -c4 PING www.bytemark.co.uk (212.110.161.177) 56(84) bytes of data. 64 bytes from extapp-front.bytemark.co.uk (212.110.161.177): icmp_seq=1 ttl=57 --- www.bytemark.co.uk ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 2.515/2.641/2.869/0.142 mstime=2.86 ms 从英国 Ping 到美国 [~]$ ping www.mediatemple.net -c 4 PING www.mediatemple.net (64.207.129.182) 56(84) bytes of data. 64 bytes from mediatemple.net (64.207.129.182): icmp_seq=1 ttl=49 time=158 ms --- www.mediatemple.net ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 154.155/155.282/158.321/1.802 ms 您可以立即看到性能差异。对于从英国到美国的单个 TCP/IP 连接,它花费了 156 毫秒,是英国服务器的 62 倍。这意味着,在你尝试任何事情之前,你在 Siege 上每秒可达到的最大吞吐量将达到每秒 6 个事务,仅由于延迟。 让我们来测试一下…… [~]$ siege http://www.wiredtree.com/images/arrow.gif -c 1 -t 10S -b ** SIEGE 2.66 ** Preparing 1 concurrent users for battle. The server is now under siege... Lifting the server siege...done. Transactions: 50 hits Availability: 100.00 % Elapsed time: 9.89 secs Data transferred: 0.00 MB Response time: 0.20 secs Transaction rate: 5.06 trans/sec Throughput: 0.00 MB/sec Concurrency: 1.00 Successful transactions: 50 Failed transactions: 0 Longest transaction: 0.20 Shortest transaction: 0.19 略低于 6 TPS 的预测数字。但不幸的是,情况总是如此。延迟总是会破坏任何并发测试,即使远程服务器有更多的能力。让我们从美国的服务器重复完全相同的测试,看看延迟对测试有何影响。首先快速ping一下, [~]$ ping www.mediatemple.net -c 4 PING www.mediatemple.net (64.207.129.182) 56(84) bytes of data. 64 bytes from mediatemple.net (64.207.129.182): icmp_seq=1 ttl=52 time=62.8 ms --- www.mediatemple.net ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3067ms rtt min/avg/max/mdev = 62.872/62.922/62.946/0.029 ms [~]$ siege http://mediatemple.net/_images/searchicon.png -c 1 -t 10S -b ** SIEGE 2.72 ** Preparing 1 concurrent users for battle. The server is now under siege... Lifting the server siege... done. Transactions: 73 hits Availability: 100.00 % Elapsed time: 9.62 secs Data transferred: 0.22 MB Response time: 0.13 secs Transaction rate: 7.59 trans/sec Throughput: 0.02 MB/sec Concurrency: 0.99 Successful transactions: 73 Failed transactions: 0 Longest transaction: 0.14 Shortest transaction: 0.12 所以你知道了,我们已经设法将每秒的交易量翻了一番,而无需任何服务器端更改,只需使用离测试站点更近的服务器——这表明 Siege 对网络延迟的敏感程度。 Siege 将受到测试服务器和远程服务器上可用带宽的限制。因此,一旦您开始达到更高的吞吐量水平,下载的内容量就会开始增加。在我们上面的示例中,10 秒内下载了 0.02MB——这是一个很小的 0.16 Mbps(每秒兆位)。但是当你开始增加并发用户的数量时,事情可能会发生根本性的变化,很容易使网络连接饱和——在服务器本身达到其容量之前很久。 因此,如果您测试的服务器只有 20Mbit 的可用带宽,您可能会在前面提到的 4Kb 资源上看到最多约 500 个请求/秒。 内容摘自 http://www.sonassi.com/knowledge-base/magento-kb/why-siege-isnt-an-accurate-test-tool-for-magento-performance/ Shane Madden 2012-09-14T19:29:57+08:002012-09-14T19:29:57+08:00 是的,不同的网络情况是原因。HTTP 请求往往需要 2 次往返(对于非常小的请求和响应): Client -> Server, SYN Server -> Client, SYN/ACK Client -> Server, ACK and HTTP request Server -> Client, HTTP response 所以,ping你的服务器,然后加倍;这是平均添加到每个请求的时间。 您可以启用 HTTP keep-alive-k并从等式中删除其中一个往返,但由于延迟,它仍然比本地请求慢。 golja 2012-09-14T19:32:53+08:002012-09-14T19:32:53+08:00 正如您所建议的那样,差异是由于从远程客户端到 Web 服务器的互联网传输。 因此,在进行基准测试以尝试模拟您的用户体验时,这始终是一个好习惯。因此,我所做的是尝试根据访问者的地理位置运行不同的基准测试,以了解他们对网站的体验。例如,如果我的大多数访问者来自美国,我会从那里运行一个 EC2 实例并运行基准测试。 基于此,如果需要,您可以决定部署某种 CDN。
延迟和网络容量。
我们写了一篇关于使用 Siege(与 AB 非常相似)进行并发/负载测试的好文章,特别提到了本地与远程测试。
你可以在这里阅读完整版本:
http://www.sonassi.com/knowledge-base/magento-kb/why-siege-isnt-an-accurate-test-tool-for-magento-performance/
内容摘自 http://www.sonassi.com/knowledge-base/magento-kb/why-siege-isnt-an-accurate-test-tool-for-magento-performance/
是的,不同的网络情况是原因。HTTP 请求往往需要 2 次往返(对于非常小的请求和响应):
所以,ping你的服务器,然后加倍;这是平均添加到每个请求的时间。
您可以启用 HTTP keep-alive
-k
并从等式中删除其中一个往返,但由于延迟,它仍然比本地请求慢。正如您所建议的那样,差异是由于从远程客户端到 Web 服务器的互联网传输。
因此,在进行基准测试以尝试模拟您的用户体验时,这始终是一个好习惯。因此,我所做的是尝试根据访问者的地理位置运行不同的基准测试,以了解他们对网站的体验。例如,如果我的大多数访问者来自美国,我会从那里运行一个 EC2 实例并运行基准测试。
基于此,如果需要,您可以决定部署某种 CDN。