简单基准测试Web服务器的四种方法
在开发新功能或更改一些设置时,我们必须始终问自己,网站的性能是否比以前更慢或更快?
虽然正确回答这个问题可能最好是咨询专家,尤其是如果我们谈论的是现场网站。我想谈谈一种简单的方法来观察网站在发生变化时的性能。您不必太熟悉性能测试、负载等概念。用真实例子可能更容易理解。
今年在GSoC项目中有一个关于SQL优化的项目,所以在这个例子中,我们将测试一个SQL优化Pull Request对Web服务器性能的影响:希望它更快。
最重要的是确保我们是在比较“苹果对苹果”,因此需要对环境进行一些设置,因此请在您的本地主机上运行此程序。我们将使用一些简单的工具,因为它们非常容易使用,并且在所有系统上广泛可用,并且是免费的。还有许多其他更强大的工具可以用来代替,但我太懒惰了,不想学习其他的。
工具
- Apache Bench (ab)是一个用于基准测试HTTP的工具
- mysqlslap 是一个设计用于模拟MySQL服务器客户端负载的诊断程序
要求
- web服务器 - 我在Windows上使用xampp
- ab – Apache Benchmark
- myslslap – 用于测试SQL
- gnuplot - 用于将结果显示为图形或电子表格
准备环境
- 安装一个新的joomla网站并加载大量数据,并将其命名为nogsoc
- 或从备份中恢复Joomla网站并将其命名为nogsoc
- 将nogsoc站点克隆到新站点中,并将其命名为gsoc
环境设置
Mysql
在mysql中禁用查询缓存。您可以通过设置以下方式禁用查询缓存:
SET GLOBAL query_cache_size = 0;
Joomla设置
- 禁用Joomla缓存
- 启用调试插件
- 在GSoC网站上安装com_patchtester组件来管理PR,并应用你想要测试的PR。
调试插件
启用调试插件后,你已拥有了当你的网站响应请求时发生情况的快照。例如,查看“数据库查询”选项卡,可以看到所有在加载页面时执行过的查询的日志,包括查询执行时间和一些其他有用的信息。
让我们开始测试
调试插件在响应请求时告诉我们一些信息。现在我们想知道当响应多个请求时它的表现如何。是时候运行基准测试的第一场了。
运行ab
ab -n 500 -c 100 -g out.data http://localhost/
在终端运行此命令是在请求压力测试。
- 针对本地主机(localhost)的URL
- 使用100个并发请求(-c)
- 进行500次(-n)
- 保存数据用于gnuplot(-g)
对自身运行ab(localhost)可以消除网络问题对性能结果的影响。
分析ab结果
使用上述命令,我们已经要求ab告诉我们:当100个并发请求到达web服务器时,它的表现如何?ab的回答信息丰富。ab的输出类似这样:
Concurrency Level: 100 Time taken for tests: 159.182 seconds Complete requests: 500 Total transferred: 33498213 bytes HTML transferred: 33321313 bytes Requests per second: 3.14 [#/sec] (mean) Time per request: 31836.400 [ms] (mean) Time per request: 318.364 [ms] (mean, across all concurrent requests) Transfer rate: 205.51 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 2.3 0 51 Processing: 5476 29602 5433.1 30703 35734 Waiting: 9461 30290 3585.0 30705 35734 Total: 5476 29603 5433.1 30703 35734 Percentage of the requests served within a certain time (ms) 50% 30703 66% 31342 75% 31883 80% 32535 90% 33500 the 90% of all request was served under 33500 (ms) 95% 34065 98% 34700 99% 35253 100% 35734 (longest request)
从ab结果中需要考虑的最重要数据是
每秒请求量:这告诉我们整体性能影响。越高越好。上述是3,14(req/sec)
连接时间:我通常查看“等待”行。中位数列,30705,告诉我们平均页面请求花费了多长时间(以毫秒计)。越低越好。我们的测试是否良好且未受某些延迟影响的一个指标是标准偏差列[+/– sd],要考虑一个有意义的测试,需要标准偏差的值较低。
运行Mysqlslap
mysqlslap工具可以通过一组查询对MySQL性能进行基准测试和比较,在所有可用的PR中进行。在SQL优化项目中,有关于哪些查询受PR影响的信息,因此制作两个.sql文件相当简单:一个包含新查询,一个包含旧查询。所以,为了查看发生了什么,只需在终端运行此命令两次,一次使用新的,一次使用旧的:
mysqlslap --concurrency=100 --iterations=10 --query=pr9.sql --create-schema=test -uroot -padmin
我们已要求mysqlslap以下查询的表现
- pr9.sql中的查询(--query)
- 使用100个并发连接(--concurrency)
- 使用测试数据库(--create-schema)
- 运行此测试10次(--iteration)
分析mysqlslap结果
Benchmark Average number of seconds to run all queries: 2.538 seconds Minimum number of seconds to run all queries: 2.108 seconds Maximum number of seconds to run all queries: 3.373 seconds Number of clients running queries: 100 Average number of queries per client: 2
mysqlslap的结果非常明确。它告诉我们我们的查询平均运行了2,538秒。
测试类型
为了更好地理解服务器行为,对于每个在两个网站上运行的基准测试工具,最好对每种测试类型进行两种不同的测试:负载测试和压力测试。
- 压力测试包括多次运行相同的基准测试工具命令
- 负载测试包括多次运行不同的基准测试工具命令(变化的是并发切换值,它逐渐增长,即,10、20、50、100、200)
结果准确性
为了得到更准确的结果或良好的近似估计,至少读取10次或更多,并使用最佳结果(标准偏差较低)。我建议使用shell脚本来自动化测试会话,并考虑安排它们,因为它们可能需要相当长的时间才能完成,具体取决于您的切换值或您的web服务器设置。
绘制测试数据
检查大量冷冰冰的数字并理解正在发生的事情相当困难,但当你看到这个图表时,就会变得非常清晰。
这种热力图显示了当并发请求数量增加时,Web服务器如何表现,数据来自ab(带-g选项)。下面的图表比较了两组不同查询的性能,基于运行所有查询的平均秒数,显示y轴秒数(越低越好),x轴测试次数,对于mysqlslap数据:
有更多花哨和有用的方式来展示你的数据。只需使用你喜欢的工具,如gnuplot或类似的东西。当你对Web服务器的性能更有信心时,你可以通过更改命令工具参数来简单地调查不同的情况。
祝你测试顺利。
《Joomla社区杂志》上发布的一些文章代表了作者对特定主题的个人观点或经验,可能与Joomla项目官方立场不一致。
通过接受,你将访问https://magazine.joomla.net.cn/之外由第三方提供的服务
评论