gpt4 book ai didi

apache - 我应该如何解释 Apache 的 ab 基准测试工具的结果?

转载 作者:行者123 更新时间:2023-12-03 07:19:34 25 4
gpt4 key购买 nike

好吧,我到处搜索,我似乎无法在网上找到详细的资源来解释如何解释 Apache 的 ab 服务器基准测试工具的结果。我用我认为完全不同的参数运行了几次测试,但看到了非常相似的结果(我很难想到这意味着我的网站正在完美地扩展!)。如果有人可以指点我的详细资源,如何理解这个测试的结果,或者如果有人想在这里创建一个,我认为这对我和其他人都非常有用。

最佳答案

令人沮丧,不是吗?我正在尝试做同样的事情,看看我新配置和配置的专用服务器与其他服务器相比如何。

我最终要做的是将我当前的生产服务器(双核 4GB RAM)与新服务器(四核 8GB RAM)进行比较。

我需要通过并排比较来“玩得开心”,因为生产服务器是实时的,我不想为我的用户“破坏”服务器。

在仅调用 phpinfo() 的 php 页面上使用以下命令比较当前与新版本: ab -kc 20 -t 60

在我当前的生产服务器上,我看到如下内容,它无法在给定的时间内完成任务:

Time taken for tests:   60.1234 seconds
Complete requests: 24538
Failed requests: 58
(Connect: 0, Length: 58, Exceptions: 0)
Requests per second: 408.96 [#/sec] (mean)
Time per request: 48.905 [ms] (mean)
Time per request: 2.445 [ms] (mean, across all concurrent requests)

VS 新服务器上的以下内容,在一半的时间内完成了所有测试:
Time taken for tests:   29.838791 seconds
Complete requests: 50000
Failed requests: 11
(Connect: 0, Length: 11, Exceptions: 0)
Requests per second: 1675.67 [#/sec] (mean)
Time per request: 11.936 [ms] (mean)
Time per request: 0.597 [ms] (mean, across all concurrent requests)

现在,这并不是真正的“公平”测试,因为除了基准测试之外,当前的服务器还处理 20 个网站。此外,它实际上只是在测试 apache 和 php。

对我的一个更复杂的主页进行相同的测试,在当前服务器上“感觉”很慢,我看到以下内容:
当前服务器:
Time taken for tests:   60.14170 seconds
Complete requests: 510
Requests per second: 8.50 [#/sec] (mean)
Time per request: 2353.497 [ms] (mean)
Time per request: 117.675 [ms] (mean, across all concurrent requests)

新服务器:
Time taken for tests:   60.18651 seconds
Complete requests: 1974
Requests per second: 32.89 [#/sec] (mean)
Time per request: 608.092 [ms] (mean)
Time per request: 30.405 [ms] (mean, across all concurrent requests)

此测试正在加载 Joomla CMS 动态生成的页面。这更像是一个“真实世界”的测试。同样,由于新服务器不处理当前的站点流量,所以这不是一个苹果对苹果的比较。我不想进行更难的测试,否则我的最终用户在我的网站上的体验会受到威胁。

将站点迁移到新服务器后,我计划再次进行上述测试,以便了解我的常规站点流量对基准测试有何影响。同一台机器的生产与闲置基准测试结果。

现在,我也在考虑强调新服务器并确保它 react 良好。
运行命令 ab -n 50000 -c 200 我正在观看 top 命令并查看使用了多少 CPU 和内存,同时还 *f5* 查看我的浏览器中的任何错误以了解服务器响应所需的时间。

我的第一个测试给了我:
Concurrency Level:  200
Time taken for tests: 692.160011 seconds
Complete requests: 50000
Failed requests: 30102
(Connect: 0, Length: 30102, Exceptions: 0)
Write errors: 0
Non-2xx responses: 30102
Total transferred: 456568770 bytes
HTML transferred: 442928962 bytes
Requests per second: 72.24 [#/sec] (mean)
Time per request: 2768.640 [ms] (mean)
Time per request: 13.843 [ms] (mean, across all concurrent requests)
Transfer rate: 644.17 [Kbytes/sec] received

请注意非常高的失败请求率。我的 apache 设置为最多 250 个同时请求,但我的 MySQL 只有 175 个。MySQL 是这里的故障点。它无法处理来自 apache 的所有请求。我的 Web 浏览器页面加载在许多页面刷新时给了我一个 MySQL 连接错误页面。

所以,我将 MySQL 增加到 300 个同时请求(我已经完成了,但忘记重新启动 MySQL,所以结果证明这是一个很好的测试 - 我已经确定了一个需要的更改,并且不小心做了一个实证测试来验证更改的必要性)。

下一次运行给了我以下结果:
Concurrency Level:      200
Time taken for tests: 1399.999463 seconds
Complete requests: 50000
Failed requests: 5054
(Connect: 0, Length: 5054, Exceptions: 0)
Write errors: 0
Non-2xx responses: 5054
Total transferred: 1016767290 bytes
HTML transferred: 995713274 bytes
Requests per second: 35.71 [#/sec] (mean)
Time per request: 5599.998 [ms] (mean)
Time per request: 28.000 [ms] (mean, across all concurrent requests)
Transfer rate: 709.24 [Kbytes/sec] received

这花费了两倍的时间,但失败的请求率要低得多。基本上,服务器现在配置为能够处理至少 200 个我网站主页的同时页面浏览量,但每个页面需要 5 秒才能为它们提供服务。不是很好,但比我之前遇到的 MySQL 错误要好得多。

在所有这些过程中,我的服务器 CPU 使用率为 100%,“平均负载”徘徊在 180 以上。MySQL 使用了大约 8-9% 的 CPU,并没有使用我分配的大部分 RAM ,因为我只是反复敲打同一个页面,所以它只处理单个数据库。 400MB 的 4GB+ 它被配置为增长。 top 显示缓冲区和缓存内存使用量约占总可用 RAM 的 50%。所以当我用这个测试加载机器时,它并没有接近过载点。在真实世界的数据库使用情况下,MySQL 应该占用我分配给它的大部分内存,因此此时服务器应该非常接近满载。

我的下一个测试是在 250 个连接的“满载”下测试 apache ab -n 50000 -c 250
Concurrency Level:      250
Time taken for tests: 1442.515514 seconds
Complete requests: 50000
Failed requests: 3509
(Connect: 0, Length: 3509, Exceptions: 0)
Write errors: 0
Non-2xx responses: 3509
Total transferred: 1051321215 bytes
HTML transferred: 1029809879 bytes
Requests per second: 34.66 [#/sec] (mean)
Time per request: 7212.577 [ms] (mean)
Time per request: 28.850 [ms] (mean, across all concurrent requests)
Transfer rate: 711.73 [Kbytes/sec] received

这显示了与具有适当 MySQL 连接上限的 200 个连接测试类似的结果。我觉得这对我很好。我不喜欢 7 秒来返回一个页面,但我认为我可以通过在 Joomla 中启用缓存来在 Joomla 级别改进它,使用 APC 或 Memcache 两者都已安装但尚未被 Joomla 使用。

想碰碰运气,我想我会尝试 300 个同时连接。 ab -n 50000 -c 300 浏览器显示等待快速页面加载的时间很长。否则,结果不会有太大变化。
Concurrency Level:      300
Time taken for tests: 1478.35890 seconds
Complete requests: 50000
Failed requests: 2266
(Connect: 0, Length: 2266, Exceptions: 0)
Write errors: 0
Non-2xx responses: 2266
Total transferred: 1079120910 bytes
HTML transferred: 1057241646 bytes
Requests per second: 33.83 [#/sec] (mean)
Time per request: 8868.215 [ms] (mean)
Time per request: 29.561 [ms] (mean, across all concurrent requests)
Transfer rate: 712.99 [Kbytes/sec] received

我不知道我对这些结果的解释是否“正确”,或者我是否遗漏了一些有值(value)的东西,但由于缺乏我能找到的指导,这就是我想出的。

我只是使用结果来确保我获得了良好的响应率 - 缺乏完美的响应率让我感到担忧,但我不知道如何以我可以检查它们的方式查看或重现失败。

每个请求的缓慢时间也让我担心,但我认为我可以在应用程序层解决大部分问题。

我相信虽然服务器会慢到爬行,但它可以处理重负载情况。

在这些基准测试之后查看其他性能调整工具(如 MonYog)也表明我当前的配置“足够好”。

我希望有一个地方可以让人们发布测试结果,我可以用硬件描述和软件配置来重现,这样我就知道我是否具有“竞争力”,或者我是否还有很多工作要做才能最好地利用我的设备。因此,为什么我要发布我的结果。

关于apache - 我应该如何解释 Apache 的 ab 基准测试工具的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4864349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com