Nginx-性能优化-ab压力测试工具

简介: Apache Benchmark(简称ab) 是Apache安装包中自带的压力测试工具 ,简单易用。

QQ图片20220425222221.jpg

Apache Benchmark(简称ab) 是Apache安装包中自带的压力测试工具 ,简单易用。


这玩意是个神器,之前一直有在用,但是没有仔细研究,最近可能会有并发量比较大的需求,使用ab来做压力。这里大概记录一下ab的一些使用规范。

 

我的服务器是腾讯云的,系统是centos7.6

 

1:安装ab


这里给出两种安装命令,分别是ubuntu和centos。


Centos:


yum -y install httpd-tools

 

Ubuntu:


sudo apt-get install apache2-utils

 

2:ab压力测试命令


Ab -c 100 -n 1000  https://guanchao.site/


**guanchao.site/**进行1000次请求…


下面部分,有注释的地方,需要重点关注一下。


This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking guanchao.site (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:        nginx/1.16.1
Server Hostname:        guanchao.site
Server Port:            80
Document Path:          /
Document Length:        169 bytes
Concurrency Level:      100
//整个测试持续的时间
Time taken for tests:   13.053 seconds
// 总请求次数
Complete requests:      1000
// 请求失败次数
Failed requests:        0
Write errors:           0
Non-2xx responses:      1000
// 一共发送数据量
Total transferred:      361000 bytes
HTML transferred:       169000 bytes
//平均每秒处理30个请求
Requests per second:    76.61 [#/sec] (mean)
//平均每个请求处理时间为1305毫秒 注:这里将一次100个并发请求看成一个整体
Time per request:       1305.266 [ms] (mean)
// 单次访问时间
Time per request:       13.053 [ms] (mean, across all concurrent requests)
Transfer rate:          27.01 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        2  487 828.8      2    7010
Processing:     2  238 865.8      2   12040
Waiting:        2  228 864.6      2   12040
Total:          4  725 1259.1     16   13042
Percentage of the requests served within a certain time (ms)
// 50%的请求在16ms中完成
  50%     16
  66%   1004
  75%   1017
  80%   1207
  90%   2232
  95%   3262
  98%   3759
  99%   5912
// 最长请求时间13042ms
 100%  13042 (longest request)


ab -c 5000 -n 10000 'http://guanchao.site/'


5000次并发,请求10000次,服务器直接返回错误,说明,我刚刚测试的这个接口,并发支持5000的并发量,有待优化。


[root@VM_0_4_centos ~]# ab -c 5000 -n 10000 'http://guanchao.site/'
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking guanchao.site (be patient)
Completed 1000 requests
apr_socket_recv: Connection reset by peer (104)
Total of 1199 requests completed
3:关于ab参数的解释
Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
//总的请求数
-n requests Number of requests to perform宅
//一次同时并发的请求数 总的请求数(n)=次数*一次并发数(c)
-c concurrency Number of multiple requests to make
-t timelimit Seconds to max. wait for responses
-b windowsize Size of TCP send/receive buffer, in bytes
// 带参数请求,参数放入一个文件中,但是一般不建议带参数,我觉得麻烦。
-p postfile File containing data to POST. Remember also to set -T
-u putfile File containing data to PUT. Remember also to set -T
-T content-type Content-type header for POSTing, eg.
'application/x-www-form-urlencoded'
Default is 'text/plain'
-v verbosity How much troubleshooting info to print
-w Print out results in HTML tables
-i Use HEAD instead of GET
-x attributes String to insert as table attributes
-y attributes String to insert as tr attributes
-z attributes String to insert as td or th attributes
-C attribute Add cookie, eg. 'Apache=1234. (repeatable)
-H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
Inserted after all normal header lines. (repeatable)
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are a colon separated username and password.
-X proxy:port Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-r Don't exit on socket receive errors.
-h Display usage information (this message)
-Z ciphersuite Specify SSL/TLS cipher suite (See openssl ciphers)
-f protocol Specify SSL/TLS protocol (SSL2, SSL3, TLS1, or ALL)

 

3:测试的几个原则


1、测试工具和测试数据时,使用到别人的网址时,-n和-c的参数不能太大。


2、测试当前的机器,最好用另一台机器测试。


3、测试修改结果,最好是某个功能完善后才测,否则会导致结果有差异。

 

一般的流量用ab测试基本上够用了,当然,ab也有windows版本的,好像是,我没用过,windows做并发测试我一般用的也是apache旗下的一款产品,jmeter。回头有时间,记录一下。

 

最后,大概说一下我在使用ab做压力测试的一个小总结


最开始用的时候,我这边就去调用正式的接口去做测试,但是有的接口他是做写入操作的,压力测试的话,还需要带数据,当然,这个ab是支持的,使用-p  然后将请求的参数写入文件中,


请求的命令大概是这样的


ab -c 5000 -n 10000 -p a.txt 'http://guanchao.site/'


但是个人觉得没必要那么麻烦,比如我测试的接口是学生选课的接口,不同的用户,同时并发写入,参数可能就不是那么容易。


我们完全可以将前端传递的参数在方法中写死,或者随机生成,然后,查询和写入依旧,其实就可以了。



目录
相关文章
|
12月前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
909 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
12月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
863 6
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
2270 10
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1720 23
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。
|
数据可视化 测试技术 Go
Go 语言测试与调试:`go test` 工具用法
`go test` 是 Go 语言内置的测试工具,支持单元测试、基准测试、示例测试等功能。本文详解其常用参数、调试技巧及性能测试命令,并提供实际项目中的应用示例与最佳实践。
|
监控 Java 数据挖掘
利用Jmeter工具进行HTTP接口的性能测试操作
基础上述步骤反复迭代调整直至满足预期目标达成满意水平结束本轮压力评估周期进入常态监控阶段持续关注系统运转状态及时发现处理新出现问题保障服务稳定高效运作
1431 0
|
弹性计算 JavaScript Ubuntu
WebSocket协议相关的测试命令工具使用简介
本文介绍了针对WebSocket的测试工具wscat和websocat的基本使用方法,以及通过curl命令测试HTTP/HTTPS协议的方式。对于WebSocket,直接使用curl测试较为复杂,推荐使用wscat或websocat。文中详细说明了这两种工具的安装步骤、常用参数及连接示例,例如在ECS上开启8080端口监听并进行消息收发测试。此外,还提供了curl命令的手动设置头部信息以模拟WebSocket握手的示例,但指出curl仅能作为客户端测试工具,无法模拟服务器。
4299 5
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
2377 24
|
人工智能 数据可视化 测试技术
UAT测试排程工具深度解析:让验收测试不再失控,项目稳稳上线
在系统交付节奏加快的背景下,“测试节奏混乱”已成为项目延期的主因之一。UAT测试排程工具应运而生,帮助团队结构化拆解任务、清晰分配责任、实时掌控进度,打通需求、测试、开发三方协作闭环,提升测试效率与质量。本文还盘点了2025年热门UAT工具,助力团队选型落地,告别靠表格和群聊推进测试的低效方式,实现有节奏、有章法的测试管理。