博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux平台下可视化压测软件visual-wrk
阅读量:6555 次
发布时间:2019-06-24

本文共 4099 字,大约阅读时间需要 13 分钟。

hot3.png

visual-wrk是一款基于wrk开源项目二次开发的Linux下可视化压测软件。 git地址(

朋友,如果你需要一款Linux下安装简便、易于使用的压测工具;或是需要超高并发却苦于没有服务器集群;或是需要将压力测试集成至Jenkins并得到一份丰富的可视化报表;又或是需要随机、按比例混合测试案例的压测工具,那么visual-wrk将是你的不二之选!!!

1. 为什么基于wrk做二次开发?

在公司的测试环境中,考虑该压测软件将与Linux上的Jenkins持续集成工具联动使用;另外考虑到公司的技术栈以C/C++为主,因此我们需要一款Linux下安装方便操作简单高并发高扩展性、使用C/C++编写的开源命令行压测工具。

以下是对部分压测软件的功能比较:

压测软件 并发量 https POST 报告完善度 可扩展性 并发架构
http_load Y N select
webbench Y N fork
ab Y Y epoll
siege Y Y multi thread
wrk Y Y epoll + multi thread
Jmeter Y Y multi thread
LoadRunner Y Y multi thread

Jmeter:并发架构是多线程模拟用户请求,并发量受多线程切换的影响,在并发上百后达到瓶颈,不太适合高并发请求场景。

LoadRunner:利用Controller控制Generator负载生成器产生负载(每台最高大约提供几百的并发请求),并发架构为多线程,如果模拟高并发情形则需要多台Generator,不适宜简单的内部使用。

ab:操作简便易用,报表丰富;基于epoll的并发架构,并发量非常高;但是可扩展性低,不适合并发请求不同的url;启动后为单线程,cpu利用不够充分。

siege:并发架构为多线程,并发量过大时,线程间切换会影响并发性能。

其他:很多极简软件,https协议或post请求都不支持的就不提及了。

wrk:基于epoll的并发架构,并发量非常高;可支持多线程,充分利用了CPU;支持lua的脚本扩展(可以衍生出多种测试方案);唯一的不足是提供的测试结果不是很丰富。

综合比较来看,wrk压力测试工具具备高并发、高扩展等特点,最终我们选定了它作为我们二次开发的原型软件,并将开发重点偏向于压测方案的改进以及性能的可视化展示。

2. visual-wrk的改进点

  1. 降低多线程加载测试配置导致的误差延时。
  2. 支持批量URL的随机压测。
  3. 支持不同权重比的URL文件混合压测。
  4. 丰富测试结果,生成可视化报表,并支持在Jenkins HTML report浏览。
  5. 支持在测试报告中展示被测机器的性能变化(需安在被测机器上安装性能采集模块)。

3. 下载与安装

git clone git@github.com:NavInfo2/visual-wrk.gitcd visual-wrk/makemake install

4. 命令行参数

Usage: wrk 
Options: -c, --connections
Connections to keep open //并发个数 -d, --duration
Duration of test //测试时长 -i, --interval
Request sampling interval//RPS的采样间隔 -t, --threads
Number of threads to use //开启线程数,默认每增加500个并发,增加1个线程,直到线程数与机器核数一致 -s, --script
Load Lua script file //指定lua脚本,当软件不满足用户使用条件,用户可以自定义lua脚本做些特殊处理(默认不使用) -j, --json Load json data for script//包含http(PATH,METHOD,BODY等类型)的json数据,由lua脚本加载处理后提供给visual-wrk压测主程序使用 -H, --header
Add header to request //为request url增加特殊的header --latency Print latency statistics //统计事物时延 -v, --version Print version details //打印软件版本 Numeric arguments may include a SI unit (1k, 1M, 1G) Time arguments may include a time unit (2s, 2m, 2h)

5. 使用方法

支持的测试方法包括单一url压测单文件随机压测以及多文件权重压测。 支持的HTTP方法为GETPOST。 支持的测试数据格式为字符串base64

  • 对 单一url进行压测 单一url压测wrk -t4 -c400 -d30s http://127.0.0.1:8080/index.html --latency

  • 对data.json中的全部url进行批量的随机压测 单文件随机压测wrk -t4 -c400 -d30s -j data.json --latency

  • 对mixed_test.json中多个文件以按权重比比例随机压测 多文件权重压测wrk -t4 -c400 -d30s -j data/mixed_test.json --latency

测试完毕后,测试报告位于测试目录下的report/log.html中

注:

  • 单文件随机压测的文件格式

    {	    "request":                 	    [	        {	            "path": "url path",	            "method": "GET or POST"				"bodyType": "base64"				"body": "body content"	        }                	    ]	} 	path字段:填充url的path	method字段:填充POST或GET,其他方法暂未支持	body字段:method字段填充POST时,该字段为POST的内容;当填充GET时,不需要该字段	bodyType字段:当body内容为base64格式的数据时,需要增加该字段,并填充base64
  • 多文件权重压测的文件格式

    {        "mixed_test":              	    [	        {	            "label":"get",     	            "file": "data/method_get.json", 	            "weight": "1"      	        }	     ]	}	label字段:自定义唯一标签名	file字段:测试文件路径(以data的上一级目录为基准)	weight字段:每个文件的测试权重比	当json文件为混合压测文件时,请以“mixed_”开头重命名文件

    具体格式内容案例可参见以下文件

    GET请求的文件:data/method_get.json	POST请求的文件:data/method_post_base64.json	基于Base64的POST请求的文件:data/method_post.json	混合压测的文件:data/mixed_test.json

6. 压测报告介绍

报告分为三个模块:测试参数、测试结果、服务信息。

1) 测试参数模块

测试参数

上图内容:

  • 测试文件为route100_500km.json,用户可以点击进入查看该测试文件
  • URL的地址为https://navicore.mapbar.com,使用了https协议,主机为navicore.mapbar.com,path存在json文件中
  • 此次压测并发量为60,持续测试5分钟

2) 测试结果模块

测试结果

上图内容:

  • 在5分钟内发起了7508次请求,接收了858.80MB的数据
  • 在传输层发生了一次连接错误,4次read错误(read错误可能是在读取数据时超时导致的)
  • 完成了7058次请求
  • 非2xx或3xx的请求响应个数为5个
  • 平均RPS为每秒25.03个
  • 平均数据传输速率为每秒2.86MB
  • 发现了5次404的HTTP请求错误码

时延分布 上图内容:

  • 完成HTTP事务时延分布:50%在2.31秒以内,100%的请求在3.59秒以内

RPS采集图

上图绘制了测试期间,每秒完成的请求个数与response code为200的个数

时延分布柱状图

上图绘制了时延分布的柱状图

测试结果表

上表是对测试结果整理,stdev为标准差,+/-stdev为包含一个正负标准差的分布比例

3) 服务器信息模块(需在服务器安装信息采集模块)

该模块收集了被测服务器的硬件信息

信息采集模块安装及使用方法,可参见()

硬件信息表

上图展示了被测端的服务器系统信息、CPU硬件信息及硬盘使用率

CPU使用率

上图展示了被测端的各个CPU使用率折线图

内存使用率

上图展示了被测端的内存使用率折线图

IO读写

上图展示了被测端的IO读写次数以及IO读写大小的折线图

转载于:https://my.oschina.net/u/4091021/blog/3018164

你可能感兴趣的文章
K-Means聚类算法的原理及实现【转】
查看>>
类的生命周期
查看>>
php apache用户写文件夹权限设置
查看>>
003-诠释 Java 工程师【一】
查看>>
浅析rune数据类型
查看>>
普通用户开启AUTOTRACE 功能
查看>>
1034 - Navigation
查看>>
Bind+Nginx实现负载均衡
查看>>
游侠原创:推荐一款免费的Syslog转发工具
查看>>
巧用Zabbix自定义监控Mysql性能状态
查看>>
UIKeyboard键盘相关知识点-IOS开发
查看>>
你真的会 snapshot 吗? - 每天5分钟玩转 OpenStack(163)
查看>>
onAttachedToWindow和onDetachedFromWindow调用时机源码解析
查看>>
虚拟机外接USB设备情况的vMotion问题
查看>>
Mysql数据库大小查询
查看>>
#78 Reimplement Trampoline
查看>>
使用Java制作图文验证码
查看>>
java学习笔记----之多线程开发
查看>>
使用javap分析return和finally的执行字节码
查看>>
java 代理
查看>>