阅读时间6分钟 (1192字)

简单基准测试Web服务器的四种方法

An Easy Way to Benchmark a Webserver

在开发新功能或更改一些设置时,我们必须始终问自己,网站的性能是否比以前更慢或更快?

虽然正确回答这个问题可能最好是咨询专家,尤其是如果我们谈论的是现场网站。我想谈谈一种简单的方法来观察网站在发生变化时的性能。您不必太熟悉性能测试、负载等概念。用真实例子可能更容易理解。

今年在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。

调试插件

启用调试插件后,你已拥有了当你的网站响应请求时发生情况的快照。例如,查看“数据库查询”选项卡,可以看到所有在加载页面时执行过的查询的日志,包括查询执行时间和一些其他有用的信息。

debug plugin

让我们开始测试

调试插件在响应请求时告诉我们一些信息。现在我们想知道当响应多个请求时它的表现如何。是时候运行基准测试的第一场了。

运行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服务器设置。

绘制测试数据

检查大量冷冰冰的数字并理解正在发生的事情相当困难,但当你看到这个图表时,就会变得非常清晰。

testGsocLoad

这种热力图显示了当并发请求数量增加时,Web服务器如何表现,数据来自ab(带-g选项)。下面的图表比较了两组不同查询的性能,基于运行所有查询的平均秒数,显示y轴秒数(越低越好),x轴测试次数,对于mysqlslap数据:

stresssql

有更多花哨和有用的方式来展示你的数据。只需使用你喜欢的工具,如gnuplot或类似的东西。当你对Web服务器的性能更有信心时,你可以通过更改命令工具参数来简单地调查不同的情况。

祝你测试顺利。

 

 

 

 

《Joomla社区杂志》上发布的一些文章代表了作者对特定主题的个人观点或经验,可能与Joomla项目官方立场不一致。

0
 

评论

已注册? 登录这里
还没有评论。成为第一个发表评论的人

通过接受,你将访问https://magazine.joomla.net.cn/之外由第三方提供的服务