共计 1914 个字符,预计需要花费 5 分钟才能阅读完成。
网站性能压力测试是性能调优过程中必不可少的一环。只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题。Apache 中有个自带的,名为 ab 的程序,可以对 Apache 或其它类型的服务器进行网站访问压力测试。
ApacheBench 命令原理:
ab 命令会创建很多的并发访问线程,模拟多个访问者同时对某一 URL 地址进行访问。它的测试目标是基于 URL 的,因此,既可以用来测试 Apache 的负载压力,也可以测试 nginx、lighthttp、tomcat、IIS 等其它 Web 服务器的压力。ab 命令对发出负载的计算机要求很低,既不会占用很高 CPU,也不会占用很多内存,但却会给目标服务器造成巨大的负载,其原理类似 CC 攻击。自己测试使用也须注意,否则一次上太多的负载,可能造成目标服务器因资源耗完,严重时甚至导致死机。
格式:# ab [options] [http://]hostname[:port]/path
参数说明:
-n requests Number of requests to perform
// 在测试会话中所执行的请求个数(本次测试总共要访问页面的次数)。默认时,仅执行一个请求。
-c concurrency Number of multiple requests to make
// 一次产生的请求个数(并发数),就相当于一定是同时处理这个多个并发,处理完就是一个事务。默认是一次一个。
ApacheBench 用法详解:在 Linux 系统,一般安装好 Apache 后可以直接执行;
# ab -n 1000 -c 100 http://10.1.1.128/test.php
// n 后面的代表总共发出 1000 个请求;- c 后面的 100 表示采用 100 个并发(模拟 100 个人同时访问),后面的网址表示测试的目标 URL。
结果分析:
Document Path: /test.php
# 测试的页面
Document Length: 15 bytes
# 页面大小
Concurrency Level: 100
# 测试的并发数,也是 - c 选项
Time taken for tests: 0.575 seconds
# 整个测试持续的时间
Complete requests: 1000
# 完成的请求数量
Failed requests: 0
# 失败的请求数量
Write errors: 0
Total transferred: 171171 bytes
# 整个过程中的网络传输量
HTML transferred: 15015 bytes
# 整个过程中的 HTML 内容传输量
Requests per second: 1739.26 [#/sec] (mean)
# 最重要的指标之一,相当于 LR 中的每秒事务数,后面括号中的 mean 表示这是一个平均值
Time per request: 57.496 [ms] (mean)
# 最重要的指标之二,相当于 LR 中的平均事务响应时间,后面括号中的 mean 表示这是一个平均值 —-》计算公式:事务量 =n/c,事务平均响应时间 = 总耗时 / 事务量
Time per request: 0.575 [ms] (mean, across all concurrent requests)
# 每个连接请求实际运行时间的平均值
Transfer rate: 290.73 [Kbytes/sec] received
# 平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
123456 Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 6 8.5 1 28
Processing: 1 49 18.4 51 113
Waiting: 0 46 17.2 49 91
Total: 11 55 19.5 54 140
# 整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中 50%的用户响应时间小于 54 毫秒,66%的用户响应时间小于 58 毫秒,最大的响应时间小于 140 毫秒。对于并发请求,cpu 实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个 Time per request 时间约等于第二个 Time per request 时间乘以并发请求数。
总结:在远程对 web 服务器进行压力测试,往往效果不理想(因为网络延时过大),建议使用内网的另一台或者多台服务器通过内网进行测试,这样得出的数据,准确度会高很多。如果只有单独的一台服务器,可以直接本地测试,比远程测试效果要准确。
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-06/144781.htm