Apache Bench 压测工具


Apache Bench 压测工具

文章插图
 
 
Apach Bench 压测工具 本篇主要讲解Apach Bench的基本使用 包括基本命令 和 对返回结果参数的详解,它可以很轻松的发送一些并发请求,ab命令可以创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问 是一款非常好用的工具 。
 1.mac版本无需下载 如果你是Mac用户 那么恭喜 Mac电脑自带了Apach Bench工具,如果你是Windos用户那么请你面向百度 查询如何安装吧,我这里不做解释 。
 
 2.基本命令讲解 
 Apache Bench 用法
 Usage: ab [options] [http[s]://]hostname[:port]/path
 options 有很多可选项这里我先说常用的几个(最下面会贴出所有的 options )
-n 发起的总请求数 -c 并发数(模拟多少客户端同时请求) -t 测试所进行的最大秒数,限制测试在某时间内 测试: 向百度发送 2000个请求,并发数200
ab -c 200 -n 2000 https://www.baidu.com/ johnny@localhost:~$ ab -c 200 -n 2000 https://www.baidu.com/ This is ApacheBench, Version 2.3 <$Revision: 1826891 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.baidu.com (be patient) Completed 200 requests Completed 400 requests Completed 600 requests Completed 800 requests Completed 1000 requests Completed 1200 requests Completed 1400 requests Completed 1600 requests Completed 1800 requests Completed 2000 requests Finished 2000 requests Server Software: BWS/1.1 Server Hostname: www.baidu.com Server Port: 443 SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128 TLS Server Name: www.baidu.com【Apache Bench 压测工具】 Document Path: / Document Length: 227 bytes Concurrency Level: 200 #并发数 Time taken for tests: 21.999 seconds #完成这次测试的时间 既完成2000个请求的时间 Complete requests: 2000 #总请求数 Failed requests: 0 #失败数 Total transferred: 2163799 bytes #整个场景中的网络传输量,表示所有请求的响应数据长度总和,包括Http头信息 html transferred: 454000 bytes #整个场景中的HTML内容传输量,表示所有请求的响应数据中正文数 据的总和 不带Http头的 Requests per second: 90.91 [#/sec] (mean) #重点! 吞吐量 -> Complete requests / Time taken for tests = (2000 / 21.999) Time per request: 2199.874 [ms] (mean) #重点! 每次并发(200) 执行完成的时间 总请求时间/(总请求数/并发数) = (21.999 / (2000/200) ) Time per request: 10.999 [ms] (mean, across all concurrent requests) #重点! 并发数内的每个请求的平均相应时间-> 每次并发执行总时间/并发数 = (2199.874/ 200 )Transfer rate: 96.05 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 216 1523 470.0 1519 2320 Processing: 34 480 449.2 346 1959 Waiting: 34 390 390.0 322 1653 Total: 308 2002 212.5 1930 3753 Percentage of the requests served within a certain time (ms) 50% 1930 #50%的用户 相应时间小于 19毫秒 66% 198975% 206380% 2224 #80%的用户 相应时间小宇 22毫秒 90% 2287 95% 2306 98% 2670 99% 2799 100% 3753 (longest request) 返回结果重点部分:
Requests per second: 90.91 [#/sec] (mean) #重点! 吞吐量 -> Complete requests / Time taken for tests = (2000 / 21.999) Time per request: 2199.874 [ms] (mean) #重点! 每次并发(200) 执行完成的时间 总请求时间/(总请求数/并发数) = (21.999 / (2000/200) ) Time per request: 10.999 [ms] (mean, across all concurrent requests) #重点! 并发数内的每个请求的平均相应时间-> 每次并发执行总时间/并发数 = (2199.874/ 200 )  3.编写接口 使用Apache Bench 测试 
private static int count = 0; private static AtomicInteger atomicInteger = new AtomicInteger(0); /** * 测试 count++ */ @RequestMApping("/bench1") public void bench2() throws InterruptedException { count++; Thread.sleep(100); } /** * 测试 ActomicInteger */ @RequestMapping("/bench2") public void bench3() throws InterruptedException { atomicInteger.getAndIncrement(); Thread.sleep(100); } /** * 打印最终的结果 */ @RequestMapping("/printCount") public void printCount() { log.info("【count: {}】", count); log.info("【AtomicCount: {}】", atomicInteger.get()); } 第一个接口是 测试 count++ 第二个接口使 测试 ActomicInteger 第三个接口使 打印 count和ActomicInteger的值
 
 分别对接口 1 和 2 发送 2000个请求 并发数200
Apache Bench 压测工具

文章插图
 
 访问接口3 结果:


推荐阅读