Ubuntu下使用Apache Bench对网站进行压力测试

1. 什么是网站的压力测试

一般来说,衡量网站的性能指标,需要从以下几点进行考量:

  • 响应时间
  • 吞吐量
  • 并发量
  • 性能计数器

1.1 响应时间

响应时间抽象点来说可以是执行一个操作的从开始到完成的总耗时,包括:

  • 客户端和服务器传输 - 几十毫秒 ~ 几秒都有可能
  • 服务器处理请求查询数据库 - 几毫秒
  • 机械硬盘寻址 - 几毫秒
  • 机械硬盘1M数据 - 2毫秒
  • SSD读取1M数据 - 0.3 毫秒
  • 内存读取1M数据 - 10微秒
  • 程序简单逻辑处理 - 微秒

1.2 吞吐量

吞吐量指单位时间内系统处理的请求数量,体现系统的整体处理能力。

对于网站,可用“请求数/秒”、“页面数/秒”或“访问人数/天”、“处理业务数/小时”等来衡量。

重要指标有TPS(每秒处理的事物数)、QPS(每秒查询的请求数)、HPS(每秒HTTP请求数)等。

1.3 并发量

并发量指系统能够同时处理的请求的数目,这个数字反映了系统的负载性能。对于网站而言,并发数指网站用户同时提交请求的用户数目。

1.4 性能计数器

性能计数器描述服务器或操作系统性能的一些数据KPI指标。

如System Load、对象与线程数、内存使用、CPU使用、磁盘与网络I/O等使用情况。

通过对这些指标设置报警阈值,当监控系统发现性能计数器超过阈值时,就向开发人员和运维报警,及时发现异常并处理。

2. 安装Apache Bench对网站进行压力测试

ab是apache自带的压力测试工具。ab进行的一切测试本质上是基于HTTP的。

2.1 安装Apache Bench命令

sudo apt-get install apache2-utils

2.2 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)

一般来说简单实用,我们只用关注 -n 和 -c 参数就行了。

2.3 测试兔子先生网站

ab -n 100 -c 10 https://www.xtuz.net/
Benchmarking www.xtuz.net (be patient).....done


Server Software:        nginx/1.16.1
Server Hostname:        www.xtuz.net
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-CHACHA20-POLY1305,2048,256
TLS Server Name:        www.xtuz.net

# 页面路径
Document Path:          /

# 页面大小
Document Length:        14495 bytes

# 并发数目
Concurrency Level:      10

# 整个测试持续的时间 
Time taken for tests:   8.400 seconds

# 完成请求数
Complete requests:      100

# 失败请求数
Failed requests:        98
   (Connect: 0, Receive: 0, Length: 98, Exceptions: 0)
Total transferred:      1469695 bytes
HTML transferred:       1448495 bytes

# 每秒处理请求数
Requests per second:    11.90 [#/sec] (mean)

## 平均每个请求处理时间为840毫秒  注:这里将一次10个并发请求看成一个整体 
Time per request:       839.989 [ms] (mean)

## 平均每个并发请求处理 时间 为84毫秒 
Time per request:       83.999 [ms] (mean, across all concurrent requests)

## 传输速度
Transfer rate:          170.87 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        2    4   4.6      2      18
Processing:    74  740 462.6    628    2702
Waiting:       74  740 462.6    628    2702
Total:         91  744 461.5    631    2705

Percentage of the requests served within a certain time (ms)
## 在这100个请求中有50%在631毫秒内完成 
  50%    631
  66%    755
  75%    861
  80%    965
  90%   1368
  95%   1803
  98%   2355
  99%   2705
 100%   2705 (longest request)

发送100个请求,并发数为10

结论是 每秒可以处理11个请求

2.4 2. 测试时出现的Failed requests原因分析:

只要出现 Failed Request 就会对应有说明

Failed requests:        98
(Connect: 0, Receive: 0, Length: 98, Exceptions: 0)

分别有Connect、Receive、Length、Exceptions。

  • Connect 无法送出要求、目标主机连接失败、要求的过程中被中断。
  • Revieve 表示接受过程中被终端,例如主机主动断开连接

  • Length 响应的内容长度不一致 ( 以 Content-Length 头值为判断依据 )。

  • Exception 发生无法预期的错误。

兔子先生 测试失败请求都落在Length类别上,原因是动态页面,可以不用考虑


相关主题:
相关推荐
  1. 唐山市遵化市圣贤国学双语幼儿园 - 唐山幼儿园黄页
  2. 武汉动物园火烈鸟孔雀排队打疫苗
  3. 山鸡与凤凰
  4. 鞍山市立山区嘉星幼儿园 - 鞍山幼儿园黄页
  5. 电池技术 - 电动汽车的核心
  6. VPS - OpenVZ主机编译代码发现内存不足的问题
  7. 湖南省常德市汉寿县岩嘴乡松树村小学
  8. 中山市石岐第一小学(石岐一小)
  9. 事发武汉农夫山泉矿泉水内惊现大量虫卵
  10. Python公开课 - 全文检索模块Whoosh详解(1)
  11. Ubuntu16.04部署phantomjs出现QXcbConnection问题
  12. 易中天给英雄武汉的一首诗 - 武汉新鲜事
  13. 灰姑娘
  14. 长春市二道区艾迪尔幼儿园东方之珠分园 - 长春幼儿园黄页
  15. 藏书实小幼儿园 - 苏州幼儿园黄页
  16. 连云港师专一附小
  17. Django如何检查终端类型
  18. 湖北将发放消费券 - 武汉新鲜事
  19. 温州市苍南县宜山镇第三小学
  20. 狼和它的猎物
  21. 武汉市东西湖区小宝宝幼儿园 - 武汉幼儿园黄页
  22. 跛子大康
  23. 临川市第八小学
  24. 长春市德惠市天台镇中心幼儿园 - 长春幼儿园黄页
  25. 百名网媒总编辑登上知音号欣赏武汉夜色
  26. 吉林市船营区圆梦艺术幼儿园 - 吉林市幼儿园黄页
  27. 以天下为己任
  28. 巴拉巴拉小魔仙
  29. 车队管理及解决方案 - 附SkyBitz & Omnitracs成立车队管理合作伙伴
  30. 如何在Django项目中优雅的实现markdown和代码高亮
  31. 河北省邯郸市河南疃镇中心幼儿园 - 邯郸幼儿园黄页
  32. 上海市东荷小学
  33. 伪装成牧羊人的狼
  34. 新手入门选择Python2还是Python3
  35. 黄山长干小学
  36. 武汉一女子七天被骗220万
  37. 红苹果幼儿园(幸福横路) - 成都市幼儿园黄页
  38. 警方通报:武汉男子持刀至五死一伤,嫌犯已跳桥
  39. 程序自动去除图片水印
  40. 我不是孔雀公主
  41. 青海省西宁市马坊小学
  42. Python公开课 - 多进程使用
  43. 葡萄镇明星幼儿园 - 桂林幼儿园黄页
  44. 脱单!武汉的相亲角在哪你知道吗?
  45. 奥迪客户不满加价,被武汉4S店销售群殴
  46. 韶关市曲江区第一小学(曲江一小)
  47. 长沙市青园小学
  48. 央媒聚焦!国庆假期173.78万人次打卡大美黄陂
  49. 农夫与蛇
  50. 花瓣儿风车