Apache Bench(ab)压力测试概述——涵盖从0到1的主要使用场景

发布于:2024-10-24 编辑:匿名 来源:网络

前言 Apache Bench(ab)主要用于为HTTP服务提供性能压力测试。下面总结一下ab在日常使用中用到的压力测试。

测量方法。 ab更接近实用主义,不像其他工具那样包含大量参数,使用场景很少。

当看到man或者--help帮助文档中显示的密密麻麻的参数时,难免有些人会望而却步。本文面向生产和日常使用,不会对每个参数进行钻探。

当您阅读本文时,您一定已经有了解决问题的需求,并尽量让您用最少的时间和成本,提高业务绩效。 ,对负载能力有一个大致完整的评估。

1、如何安装ab1.Linux建议直接从软件源安装。默认情况下会安装每个组件所需的依赖项。

编译安装需要手动安装依赖。每个发行版的依赖组件的命名可能不同。

你可能会遇到各种错误,就像递归一样,你必须陷入其中,所以我更喜欢实用和简约,除非自带的软件版本太旧,不满足需要,或者我看看每个版本的版本。更改日志后,请务必指定某个安装版本,然后才能选择编译安装。

安装不是本文的重点,所以我尽量简单提一下。发行版安装命令 Arch pacman -Sy apache CentOS yum install -y httpd-tools Debian/Ubuntuapt install -y apache2-utils2。

对于 Windows 客户端,请参见此链接,下载压缩文件并解压,将 bin 目录设置为环境变量或者用cmd输入进入bin目录,然后使用ab命令。 2、压力试验机参数优化。

当使用压力测试工具进行压力测试时,会受到工具性能或机器本身性能的限制。如果受机器本身硬件性能限制,建议使用多个客户端进行压测。

同时,单机本身也有一些网络相关的内核参数可以优化。 1.tcp_fin_timeoutMSL为:Maximum Segment Lifetime,定义了任何消息允许存活的最大时间。

如果超过,就会被丢弃。然后tcp_fin_timeout用来设置MSL,默认是60s。

代码语言:shell copy cat /proc/sys/net/ipv4/tcp_fin_timeout2.tcp_tw_reuselinux 分配给每个用户的文件句柄数量是有限的。连接断开后,端口及相关资源不会立即释放,而是进入time_wait状态。

等待2MSL后进入CLOSE状态。此时,连接被释放。

可以参考RFC的定义:显然,在压测场景下,我们需要让压测机在短时间内建立尽可能多的TCP连接,并且time_wait状态如果保持2MSL(即2分钟),一旦该2MSL对应的time_wait占用的句柄达到上限,则无法添加新的TCP连接。我们需要开启tcp_tw_reuse参数,让系统启用time_wait状态复用,允许该状态下的资源可以被新的TCP连接复用。

暂时打开即可: 代码语言:shell copy sysctl -w sysctl net.ipv4.tcp_tw_reuse = 1 或: 代码语言:txt copy echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse 如果需要永久打开,则需要写入 /etc/sysctl.conf 并执行 sysctl -p 才能生效。 3.tcp_tw_recycle 顾名思义,该参数用于在time_wait状态下回收资源,一般与tcp_tw_reuse配合使用。

暂时开启: 代码语言:shell copy sysctl -w sysctl net.ipv4.tcp_tw_recycle = 1 或: 代码语言:shell copy echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle 如果需要永久开启,则需要写入/etc/sysctl.conf,执行sysctl -p即可生效。 4.ip_local_port_range 该参数表示可用于本地到外部连接的端口范围。

该参数默认值为8 9,表示单机同时最多可以建立1个连接:根据压测场景适当调整该参数。例如,要添加更多端口,可以是: 代码语言:shell copy echo '8 9' > /proc/sys/net/ipv4/ip_local_port_range5。

统计每个状态下的连接数。最后,要统计各个状态下的连接数,可以是: code 语言:shell copy netstat -an|awk '/tcp/{print $6}'|sort |uniq -cnetstat -an|awk '/tcp/{ s[$6]++}END{for(i in s)print i ,s[i]}' 3. 开始压力测试之旅。

使用--help查看参数支持列表:压力测试格式为:ab [选项] 主机名[:端口]/路径/注意:主机名后面不要放选项。不支持此用途。

1、压测短连接(-m/-c/-n)采用HTTP GET请求,每次最大并发数,压测次数为0,:代码语言:shell copy ab -m GET -c -n 0 -m 指定HTTP请求方式,如GET/POST/HEAD/PUT等,如果不指定该参数,则默认发送GET。 -c 最大同时请求数,即并发请求数。

-n 请求总数。输出信息: 代码语言:shell copy 服务器软件:nginxServer 主机名:xxxServer 端口:80文档路径:/文档长度:bytes #返回的分页大小 Concurrency Level: #并发连接数 Time take for test: 0.seconds #完成请求所花费的总时间: 0 #Total Completed requests Failed requests: 0 #Failed requests Total Transmission: bytes #传输的总字节数 HTML Transfer: bytes #传输的字节数 Requests per Second: 6.07 [#/sec] (mean) #每秒平均数of requests 每个请求的时间: 45.[ms] (mean #每个并发请求的时间: 0.[ms] (mean, across all并发请求) #每个请求的平均实际运行时间。

传输速率:0.59 [Kbytes/sec] 接收 #传输速率 连接时间 (ms) #压力测试期间的连接处理时间min Mean[+/-sd] 中值 maxConnect: 1 20 2.7 20 28 处理:7 24 5.0 23 43Waiting : 1 17 4.8 16 33Total: 22 43 4.1 43 57 一定时间内服务的请求百分比(ms) #一定时间内请求响应时间占50% 43 #一半请求完成后,统计平均响应时间,可推导出如下: 66% 44 75% 46 80% 47 90% 48 95% 50 98% 52 99% 55 % 57(最长请求)对应的抓包: 不难看出ab每次GET都会和目的地握手,同一个TCP连接不会被重用,在很短的时间内发送0次GET请求并建立0次,导致0个会话。如果需要较大剂量,如:代码语言:shell copy ab -m GET -c 0 -n 0,则每次最多发起0个请求。

由于并发量较大,可能会超出单个用户打开文件的最大数量。这个需要设置ulimit: 代码语言:shell copy ulimit -n 5ulimit是Linux系统的一个内部关键函数。

它有一组参数,用于设置 shell 进程及其生成的子进程的资源使用限制。 。

设置用户打开文件(用户可以打开的最大文件数)。查看当前用户打开的文件数量,可以使用如下命令: 代码语言:shell copy lsof -u `whoami` |wc -l2。

压测长度连接 (-k) 代码语言:shell copy ab -m GET -k - c -n 00 -m 指定HTTP请求方式,如GET/POST/HEAD/PUT等,如果不指定该参数,默认发送GET。 -c 最大同时请求数,即并发请求数。

-n 请求总数。 -k keepalive,使用长连接并尝试重用一个TCP连接。

可以明显看到,长连接模式压力测试中QPS得到了明显的提升,因为每个GET资源都尽量复用一个连接,而不像短连接每次都需要握手然后GET。同时从HTTP头字段的Connection:keep-alive可以看出,-k参数压力测试方式就是在HTTP头中添加该字段:为什么对端没有超时或者压力测试过程中响应时间显着增加?至少可以说明,此时客户端请求量级<=服务器业务层处理量级,所以只用一个客户端对服务器进行压力测试。

如果对端没有达到性能瓶颈,那么可以考虑增加压测并发度或者多客户端同时压测。下面以外部Web测试机作为演示: 从上图可以看到,服务器已经处于高负载模式,无法正常响应请求,返回状态码。

使用htop观察服务器的负载和内存使用情况。 CPU和内存都满了:统计服务器建立的连接数: 代码语言:shell copy lsof -i :80|awk '/ESTABLISHED/{S+=1}END{print S }'这个连接是指定的数量ab-c。

如果想统计指定IP已建立的连接,可以使用: 代码语言:shell copy lsof -i :80|awk '/ESTABLISHED/&&/ipaddress/{S+=1}END{print S} '3.指定超时 (-s) -s s 用于指定超时时间(以秒为单位)。从man帮助文档可以看出,2.4.4之后的版本才有该参数,默认超时时间为30s。

使用方法也很简单,只需与其他压力测量参数一起使用即可。长连接模式下,每个 GET 请求都被视为超时请求,最长 5 秒: 代码语言:shell copy ab -m GET -s 3 -k -c -n 0 -m POST -s 5 -c -n 0 '指定TLS协议版本:如何知道对方支持什么协议版本?代码语言:shell copy openssl s_client -connect hostname:-tls1/-tls1_2/-tls1_3 #注意这里的“/”不能直接写。

一次仅输入一个 tls 版本。如果有多个,可以使用循环遍历或者使用在线网站查看支持的TLS协议版本。

示例:指定 TLS1.1 版本: 代码语言:shell copy ab -f TLS1.1 -m GET -k -c -n 0 从抓包中可以清楚地看出,客户端向服务器声明自己使用了 TLS1 TLS握手包.1版本:在HTTPS场景下,不同版本的TLS和密码套件加解密强度不一致,性能损失不一致,也会直观地体现在QPS上。 5.插入cookies(-C) -C用于指定cookie信息。

格式类似于键值对: 当需要对某些需要登录的场景进行压力测试时,插入cookie来维持登录状态: 代码语言:shell copy ab - m GET -k -c -n -C 'cookie -name=value' -X proxy[:port] 代码语言:shell copy ab -m GET -X proxyip:port -k -c -n 自定义 HTTP 标头内容 指定 HOST: 代码语言:shell copy ab -m GET -H 'Host:test.com' -c -n -k -m GET -H 'Host:domain' -H 'User-Agent: RokasYang/1.0 -c - n -k 用于限制压力测试的总持续时间,类似于超时命令。单位是秒。

如果默认不指定,则没有时间限制。压力测试限5秒结束: 代码语言:shell copy ab -m GET -t 5 -c -n HEAD 改为,效果是一样的,都是发送HEAD请求。

代码语言:shell copy ab -i -k -c -n 将每个结果的测量值输出到文件。-e 以百分比进度条(1%-%)记录所有请求所花费的时间,后面一般是一个csv格式的文件,即Excel格式的文件。

记录每次请求的时间:代码语言:shell copy ab -k -c -n 0 -g output -k -c -n 0 -e output.csv HTTP状态码,可以增加客户端数量进行压力测试,我认为要确定一个服务最真实的QPS表现,需要找到从业务正常到业务异常/无响应的QPS临界点。如果使用不同的客户端对同一台服务器进行压力测试,QPS会参差不齐,这是正常现象。

当不同客户端的硬件性能不同时,发送和接收数据包的性能受到限制,QPS和网络延迟也是密不可分的。关系,哪怕是几毫秒的差异,都可能导致多级QPS差距。

尤其是在小数据包场景下,每个连接都需要与大量的数据包进行交互。在这种场景下,延迟差距造成的QPS差距不容小觑。

Apache Bench(ab)压力测试概述——涵盖从0到1的主要使用场景

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 证监会:加强对拟上市公司投资的离职系统员工监管

    证监会:加强对拟上市公司投资的离职系统员工监管

    投资圈(ID:pedaily)4月20日消息:近日,有媒体报道中证建投系统离职员工证监会对拟上市公司的惊人投资,引起各方关注。 证监会对此高度重视,坚持防范违法违规“创富”,维护市场“三公”秩序,加强监管队伍廉洁建设。 坚持问题导向、举一反三,对在审企业进行全面排查,对

    06-17

  • 今晚,4500万人与周杰伦“时光倒流”

    今晚,4500万人与周杰伦“时光倒流”

    ,应该是一场激情的爱情约会。 但当晚19点35分,还没等两人晒出甜蜜合照,他们的朋友圈就被一个许久没有出专辑的男人入侵了。 你谈你的爱情,我看我的青春。 天晴在等待烟雨,粉丝在等待“地表最强妖天伦”。 数千人在视频号直播间回忆青春。 当34岁的周杰伦带着八块锋利的巧

    06-21

  • 为打造平价时尚服装市场,919氢仓获得青松基金等两轮合计数千万元融资,

    为打造平价时尚服装市场,919氢仓获得青松基金等两轮合计数千万元融资,

    据投资界(ID:pedaily)6月4日消息,平价时尚服装市场品牌“氢仓”宣布,先后获得青松基金天使轮和个人投资者战略轮共计数十轮投资。 融资数百万元。 据其创始人&CEO席一舟介绍,本轮融资将主要用于供应链建设、门店扩张和团队建设。 “公司将重点打造江苏、安徽、四川等地

    06-18

  • 鹤壁市长郭浩:中国5G产业创新创业大赛推动高质量发展

    鹤壁市长郭浩:中国5G产业创新创业大赛推动高质量发展

    4月2日下午,“中国5G产业创新创业大赛”作为5G产业前沿创新的重要舞台,已日益突出和影响。 吸引力持续增强,为推动高质量发展提供更多活力。 ”鹤壁市市长郭浩在中国5G产业创新创业大赛全国总决赛颁奖典礼暨鹤壁市旗滨区重点产业座谈会上表示。 “最近几年。 鹤壁积极适应新

    06-17

  • 北京理工大学与珠海学院联合成立集成电路技术现代产业学院

    北京理工大学与珠海学院联合成立集成电路技术现代产业学院

    7月4日,集成电路技术现代产业学院成立暨揭牌仪式在珠海高新区举行。 这所产业学院由北京理工大学珠海学院(信息学院)、广东中兴电子股份有限公司、珠海英思科技有限公司联合创办。 图片珠海高新区 珠海高新专区新闻显示,北理工珠海学院院长赵显礼表示,集成电路发展关系产

    06-06

  • 2024年北京车展,看这26款新车就够了

    2024年北京车展,看这26款新车就够了

    时隔4年,2024年北京车展终于又来了。 4年的时间并不算长,但对于汽车行业来说已经是一个巨大的变化。 如果说去年的上海车展让世界看到了中国新能源汽车的快速发展,那么今年的北京车展则证明了一件事情:世界新能源汽车潮流就在这次北京车展。 可以说,这种四年积累的潜力,

    06-21

  • 视联科技获凤凰卫视战略投资

    视联科技获凤凰卫视战略投资

    》据4月26日消息,视联科技近日完成新一轮战略融资。 本轮投资由凤凰卫视集团旗下凤凰创新产业基金投资,此次获得的融资将主要用于人工智能产品的落地,加快业务拓展和服务体系升级。

    06-18

  • 阿里云智能总裁张建锋:创新是丽水绿色发展之路

    阿里云智能总裁张建锋:创新是丽水绿色发展之路

    “创新是我们的第一动力,也是丽水绿色发展的路径。 ” 6月9日,阿里云智能总裁、阿里巴巴达摩院特朗张建锋在国家数字生态系统创新发展峰会上致辞时表示。 阿里云智库总裁、阿里巴巴达摩院院长张建锋总结称,自2016年丽水市政府与阿里巴巴集团签署战略协议以来,在双方共同努

    06-17

  • 小度迎新期待:百度集团CIO李莹轮流担任CEO

    小度迎新期待:百度集团CIO李莹轮流担任CEO

    10月7日最新消息,百度小度公司迎来新任CEO,百度集团副总裁、百度集团CIO李莹博士,直接向李彦宏汇报工作。 业内人士分析,这轮新一轮干部轮换对小度来说意义重大。 李莹在担任百度集团CIO期间,打造了以人工智能和知识管理为核心的智能工作平台,为百度AI基础技术和产品应

    06-17

  • 诺和诺德斥资7亿美元使用蛋白质组学药物

    诺和诺德斥资7亿美元使用蛋白质组学药物

    年底,Ventus Therapeutics宣布与诺和诺德达成全球*许可协议。 根据该协议,诺和诺德将获得Ventus专有的NOD样受体pyrin结构域相关蛋白3(NLRP3)外周抑制剂的开发和商业化权利。 诺和诺德将向Ventus预付 10,000 美元,并提供研发 (R&D) 资金。 Ventus还可能收到总计 6.33 亿美

    06-17

  • 中国南车香港上市获批, A+H股IPO拟募资20亿美元

    中国南车香港上市获批, A+H股IPO拟募资20亿美元

    据悉,中国最大的铁路机车装备制造商中国南车车辆股份有限公司首次公开发行股票(IPO)计划已经香港联交所批准。 获批后,连同在上海IPO,拟募集资金规模将达20亿美元,约1亿港元。   新闻 人士表示,总部位于北京的中国南车股份有限公司计划在香港IPO发行最多20亿股,并将于

    06-18

  • 以旧换新平台有德汇获人保远望基金近亿元B+轮融资

    以旧换新平台有德汇获人保远望基金近亿元B+轮融资

    据投资界12月29日消息,全品类以旧换新平台有德汇今日宣布完成近百笔融资获得人保财险、人保财险的B+轮融资。 人保远望基金是与启迪科技合作设立的。 据悉,本轮资金将用于拓展线下市场、升级后端渠道。   优德火此前已获得多轮融资:  获得龙腾资本天使轮投资;   再

    06-18