您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

Apache Bench 压测工具

时间:2019-12-30 10:54:28  来源:  作者:

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
 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% 1989 
 75% 2063 
 80% 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 结果:

Apache Bench 压测工具

 

 

 4.扩展Semaphore 和 CountDownLatch 模拟 ab并发请求

Semaphore 和 CountDownLatch 模拟 ab 发送2000个请求 200并发 ,不懂 Semaphore 和 CountDownLatch 自行百度吧。。。

 // 请求总数
 public static int clientTotal = 2000;
 // 同时并发执行的线程数
 public static int threadTotal = 200;
 // 信号量
 final Semaphore semaphore = new Semaphore(threadTotal);
 // 计数器闭锁
 final CountDownLatch countDownLatch = new CountDownLatch(clientTotal);
 for (int i=0;i<clientTotal;i++){
 executorService.execute(new Runnable() {
 @Override
 public void run() {
 try {
 semaphore.acquire();
 add();
 semaphore.release();
 } catch (Exception e){
 System.out.println(e);
 }
 // 每个线程执行时计数器都减1
 countDownLatch.countDown();
 }
 });
 }
###  5.ab命令所有的 options 贴图
 Options are:
 -n requests #执行的请求数,即一共发起多少请求。
 -c concurrency #请求并发数。
 -t timelimit #测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
 -s timeout #指定每个请求的超时时间,默认是30秒。
 -b windowsize #指定tcp窗口的大小,单位是字节。
 -B address #指定在发起连接时绑定的ip地址是什么。
 -p postfile #指定要POST的文件,同时要设置-T参数。
 -u putfile #指定要PUT的文件,同时要设置-T参数。
 -T content-type #指定使用POST或PUT上传文本时的文本类型,默认是'text/plain'。
 -v verbosity #设置详细模式等级。
 -w #将结果输出到html的表中。
 -i #使用HEAD方式代替GET发起请求。
 -y attributes #以表格方式输出时,设置html表格tr属性。 
 -z attributes #以表格方式输出时,设置html表格th或td属性。
 -C attribute #添加cookie,比如'Apache=1234'。(可重复)
 -H attribute #为请求追加一个额外的头部,比如'Accept-Encoding: gzip'。(可重复)
 -A attribute #对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。
 -P attribute #对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
 -X proxy:port #指定代理服务器的IP和端口。
 -V #打印版本信息。
 -k #启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。
 -d #不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。
 -q #如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。
 -g filename #把所有测试结果写入一个'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。
 -e filename #产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。
 -r #当收到错误时不要退出。
 -h #输出帮助信息
 -Z ciphersuite #指定SSL/TLS密码套件
 -f protocol #指定SSL/TLS协议(SSL3, TLS1, TLS1.1, TLS1.2 or ALL)



 5.总结

本篇主要讲解了Apache Bench的基本使用 以及对压测结果的返回进行分析 包括 吞吐量 平均并发请求时间等等 对于一些有并发的接口 可以自己测测 。。。

个人博客网站 https://www.askajohnny.com 欢迎访问!

本文由博客一文多发平台 https://openwrite.cn?from=article_bottom 发布!



Tags:Apache Bench   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
Apach Bench 压测工具&emsp;本篇主要讲解Apach Bench的基本使用 包括基本命令 和 对返回结果参数的详解,它可以很轻松的发送一些并发请求 ,ab命令可以创建很多的并发访问线...【详细内容】
2019-12-30  Tags: Apache Bench  点击:(99)  评论:(0)  加入收藏
▌简易百科推荐
阿里云镜像源地址及安装网站地址https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b111kK44P更新源之前把之前的国外的镜像先备份一下 切换到yumcd...【详细内容】
2021-12-27  干程序那些事    Tags:CentOS7镜像   点击:(1)  评论:(0)  加入收藏
前言在实现TCP长连接功能中,客户端断线重连是一个很常见的问题,当我们使用netty实现断线重连时,是否考虑过如下几个问题: 如何监听到客户端和服务端连接断开 ? 如何实现断线后重...【详细内容】
2021-12-24  程序猿阿嘴  CSDN  Tags:Netty   点击:(12)  评论:(0)  加入收藏
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  有云转晴    Tags:chrome   点击:(7)  评论:(0)  加入收藏
一. HTTP gzip压缩,概述 request header中声明Accept-Encoding : gzip,告知服务器客户端接受gzip的数据 response body,同时加入以下header:Content-Encoding: gzip:表明bo...【详细内容】
2021-12-22  java乐园    Tags:gzip压缩   点击:(9)  评论:(0)  加入收藏
yum -y install gcc automake autoconf libtool makeadduser testpasswd testmkdir /tmp/exploitln -s /usr/bin/ping /tmp/exploit/targetexec 3< /tmp/exploit/targetls -...【详细内容】
2021-12-22  SofM    Tags:Centos7   点击:(7)  评论:(0)  加入收藏
Windows操作系统和Linux操作系统有何区别?Windows操作系统:需支付版权费用,(华为云已购买正版版权,在华为云购买云服务器的用户安装系统时无需额外付费),界面化的操作系统对用户使...【详细内容】
2021-12-21  卷毛琴姨    Tags:云服务器   点击:(6)  评论:(0)  加入收藏
参考资料:Hive3.1.2安装指南_厦大数据库实验室博客Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园1.安装hive1.1下载地址hive镜像路径 ht...【详细内容】
2021-12-20  zebra-08    Tags:Hive   点击:(9)  评论:(0)  加入收藏
以下是服务器安全加固的步骤,本文以腾讯云的CentOS7.7版本为例来介绍,如果你使用的是秘钥登录服务器1-5步骤可以跳过。1、设置复杂密码服务器设置大写、小写、特殊字符、数字...【详细内容】
2021-12-20  网安人    Tags:服务器   点击:(7)  评论:(0)  加入收藏
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  mdong    Tags:Nginx   点击:(7)  评论:(0)  加入收藏
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  LaLiLi    Tags:SSH连接   点击:(16)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条