文档章节

压测

A__17
 A__17
发布于 08/12 23:20
字数 1933
阅读 1
收藏 0

jmeter压测:

工具准备:apache-jmeter-5.0.tgz

本地启动jmeter: nohup sh apache-jmeter-5.0/bin/jmeter & 修改语言:option(选项) - choose language(选择语言) 安装插件:选项 - Plugins Manager - Available Plugins - 搜索:jpgc - Standard Set

机器性能监控:
	下载ServerAgent-2.2.3.zip插件:
		下载地址:https://github.com/undera/perfmon-agent/blob/master/README.md
	修改startAgent.sh文件:
		修改前:java -jar $(dirname $0)/CMDRunner.jar --tool PerfMonAgent "$@"
		修改后:java -jar $(dirname $0)/CMDRunner.jar --tool PerfMonAgent --udp-port 6789 --tcp-port 6789 "$@"
	在被压机器上启动agent:
		nohup sh startAgent.sh &
	关闭agent:
		kill掉以下的进程:
		ps aux | grep startAgent.sh
		ps aux | grep CMDRunner

编写测试计划:

添加'用户定义的变量':
	target-server-addr 目标服务器
	target-server-port 目标服务器端口
	...

测试计划右键 - 线程(用户) - 线程组
	线程数:指定发起请求的线程数。
	ramp-up period:在多长时间内启动所有的线程。
	循环次数:指定每个线程循环调用的次数。
		1>指定固定循环的次数。注:若调度器的持续时间设置的过小,则会导致无法达到设定的循环的次数。
		2>不设置固定的次数,即选'永远'。注:并不会永远执行,因为下面还设置了持续时间。
	调度器:
		持续时间:发请求持续的时间。
		启动延迟:延迟发出请求的时间。若不设置,则执行jmeter命令后立即发出请求。


	在线程组上添加:
		取样器-HTTP请求:填写 服务器地址+端口、请求方法+地址+请求参数

			在HTTP请求上添加:配置元件-HTTP信息头管理器,并配置头信息。eg:Content-Type application/json

			在线程组上 或 在HTTP请求上 添加:
				定时器-Constant Throughput Timer(固定吞吐量定时器):
				Target throughput(in samples per minute):目标吞吐量。
					说明:目标吞吐量为10,则这里应该填600。如果"循环次数"或"持续时间"太小,则很有可能达不到这里设置的吞吐量。
				Calculate Throughput based on(计算吞吐量的方式):

					this thread only:
						each thread will try to maintain the target throughput. The overall throughput will be proportional to the number of active threads.
						将每个线程的吞吐量设为Target throughput。故:总吞吐量 = Target Throughput * 线程数。

					all active threads:
						the target throughput is divided amongst all the active threads in all Thread Groups. Each thread will delay as needed, based on when it last ran. In this case, each other Thread Group will need a Constant Throughput timer with the same settings.
						将所有活跃线程的总吞吐量设为Target throughput。
						活跃线程指同一时刻同时运行的线程,每个活跃线程在 上一次运行结束后 等待合理的时间后再次运行。所有的线程组都应该使用相同的配置。

					all active threads in current thread group:
						the target throughput is divided amongst all the active threads in the group. Each thread will delay as needed, based on when it last ran.
						将该线程组中活跃线程的总吞吐量设为Target throughput。当测试计划中只有一个线程组时,该选项和all active threads效果相同。

					all active threads (shared):
						as above(all active threads); each thread is delayed based on when any thread last ran.
						与all active threads类似,不同的是,每个活跃线程会在 所有活跃线程上一次运行结束后 等待合理的时间后再次运行。

					all active threads in current thread group (shared) :
						as above(all active threads in current thread group), but each thread is delayed based on when any thread in the group last ran.
						与all active threads in current thread group类似,不同的是,每个活跃线程会在 该线程组中所有活跃线程上一次运行结束后 等待合理的时间后再次运行。

			在HTTP请求上添加:
				后置处理器-JSON Extractor(JSON提取器)
					Names of created variables				变量名,后面的HTTP请求可以通过${Variable names}获取该变量的值。
					JSON Path expressions					json path表达式,用于获取response中指定参数的值。eg:{"person":{"name":"jack"}} ==> $.person.name
					Match No.(0 for Random) 				0代表随机,1代表第一个,-1代表所有
					Compute concatenation var(suffix_ALL) 	是否将所有匹配到的值保存下来(格式:变量名=“变量名_ALL”、值=所有匹配到的值以逗号连接的字符串)。
					Default Values 							默认值,一般设为NOT FOUND

			在HTTP请求上添加:
				后置处理器-BeanShell PostProcessor
				1>引入jar包:apache-jmeter-5.0/lib/ext 下添加fastjson的jar包。
				2>编写Script:
					String response = prev.getResponseDataAsString();		// 获取response的内容(json串),prev变量是jmeter提供的。
					JSONObject responseObj = JSON.parseObject(response);	// 使用fastjson来解析json串。

					vars.put("key1", "根据response解析出来key1的value"); 		// 向vars集合中添加key-value对,后面的HTTP请求可以通过${key}来获取集合中的值,vars变量是jmeter提供的。

	在线程组上添加:
		逻辑控制器-如果(if)控制器
			条件:条件表达式。eg:"${count}"=="0"

		逻辑控制器-如果(ForEach)控制器
			输入变量前缀:变量的前缀。eg:level1_ ,则可以遍历所有以"level1_"开头的变量,比如level1_aa、level1_bb等。
			输出变量名称:遍历时使用的变量。
			说明:可以看成 for (String 输出变量名称 : 输入变量前缀)


	在线程组上添加:
		取样器-Debug Sampler
			在Debug Sampler上添加:后置处理器-BeanShell PreProcessor,我们可以通过BeanShell PreProcessor中的srcipt来初始化一些信息,即向vars集合中添加key-value对。


	说明:Debug Sampler一般都在HTTP请求的前面,即先执行线程组中的Debug Sampler,然后再依次执行HTTP请求。


测试计划右键 - 线程(用户) - jp[@gc](https://my.oschina.net/gccx) - Ultimate Thread Group
	说明:Ultimate Thread Group 是用来实现阶梯式压测的。

	Start Threads Count 	当前行启动的线程数
	Initial Delay, sec 		延时启动当前行的线程。单位秒
	Startup Time, sec 		启动当前行所有线程达峰值所需时间,单位秒
	Hold Load For, sec 		当前行线程达到峰值后持续的时间 单位秒
	Shutdown Time 			停止当前行所有线程所需时间,单位秒

在施压机器上以非GUI的方式来压测: jmeter -n -t jmx文件 -l 结果文件路径 -e -o Web报告保存路径 参数: -n run JMeter in nongui mode -t the jmeter test(.jmx) file to run -l the file to log samples to -e generate report dashboard after load test -o output folder for report dashboard eg: 脚本启动:start.sh 0808-getjob-200-10 # 日期-接口名-tps-压测持续时间 start.sh mkdir -p ~/data/jmeter/$1 apache-jmeter-5.0/bin/jmeter -n -t ~/data/jmeter/plan/my-plan.jmx -l ~/data/jmeter/$1/log -e -o ~/data/jmeter/$1/my-web-report

报告查看:~/data/jmeter/0807/my-web-report/index.html

常见问题: jmeter导入jmx文件报错:missing class com.thoughtworks.xstream.converters.ConversionException 解决:jmeter插件下载地址:https://jmeter-plugins.org/downloads/all/ ,将下载的jmeter-plugins-manager-0.11.jar文件放置到jmeter目录下\lib\ext目录下,然后重启JMeter即可。

参考资料:https://www.cnblogs.com/richered/category/1151707.html

吞吐量 吞吐量是指单位时间内处理完请求的数量。

qps: qps是指每秒处理完请求的数量 qps = 并发量 / 平均响应时间。

常用的统计脚本:

统计qps的最大值

echo "2019-07-25 22:57:32.117" | awk '{print $2}' | awk -F "." '{print$1}' | sort | uniq -c | awk '{print $1}' | sort -nr | head -1

统计qps最高的时刻

echo "2019-07-25 22:57:32.117" | awk '{print $2}' | awk -F "." '{print$1}' | sort | uniq -c | grep qps的最大值

统计每分钟请求数量的最大值

echo "2019-07-25 22:57:32.117" | awk '{print $2}' | awk -F ":" '{print $1":"$2}' | sort | uniq -c | awk '{print $1}' | sort -nr | head -1

统计前一分钟请求的数量

minute_time=$(date -d '-1 minute' +"%Y-%m-%d %H:%M") grep "${now_date}" xxx.log | grep -c "请求uri"

split函数:The awk function split(s,a,sep) splits a string s into an awk array a using the delimiter sep 举例:echo "2019-07-25" | awk '{len=split($0,a,"-");print "length="len; for(i=1;i<=len;i++)print a[i];}'

© 著作权归作者所有

上一篇: linux基础命令
下一篇: UNIX的网络I/O模型
A__17
粉丝 3
博文 105
码字总数 127846
作品 0
朝阳
私信 提问
云集微店12·12:实施全链路压测方案,开源自研分布式军演系统TITAN

云集的全链路压测之路走的还是比较艰辛的,从最初纠结用什么压测工具开始,到压框架、压单接口、压线下环境等一步步摸索,并借鉴其它友商的经验和方案,直至今天,我们才最终在黑暗中摸索出了...

高翔龙
2017/12/27
0
0
压测2.0:云压测 + APM = 端到端压测解决方案

从压力测试说起 压力测试是确立系统稳定性的一种测试方法,通常在系统正常运作范围之外进行,以考察其功能极限和隐患。与功能测试不同,压测是以软件响应速度为测试目标的,尤其是针对在较短...

OneAPM蓝海讯通
2016/04/14
107
0
感受真实性能压测的“洪荒之力” 压测宝有奖体验中

作为测试,你有没有遇到这样的问题: 1、熬了多少个日夜的系统终于快上线了,不知道上线后系统负载能力怎样? 2、促销季到了,应用性能如何?到底能不能支持500w并发用户? 3、怎么做压测才能...

cloudwiseAPM
2016/08/16
1K
6
阿里巴巴高可用技术专家襄玲:压测环境的设计和搭建

性能压测,是保障服务可用性和稳定性过程中,不可或缺的一环,但是有关性能压测的体系化分享并不多。从本期开始,我们将推出《Performance Test Together》(简称PTT)的系列专题分享,从性能...

中间件小哥
05/31
0
0
阿里巴巴容量规划技术的演进

2018年是双11的第十个年头。每年双11备战环节,稳定性都是最受关注的头等大事。 十年以来,稳定性相关的技术体系和双11就像DNA的双螺旋,彼此相生相长。在双11场景的锤炼之下,阿里的稳定性技...

中间件小姐姐
2018/11/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot2.0 maven打包分离lib,resources

springboot将工程打包成jar包后,会出现获取classpath下的文件出现测试环境正常而生产环境文件找不到的问题,这是因为 1、在调试过程中,文件是真实存在于磁盘的某个目录。此时通过获取文件路...

陈俊凯
今天
7
0
BootStrap

一、BootStrap 简洁、直观、强悍的前端开发框架,让web开发更加迅速、简单 中文镜像网站:http://www.bootcss.com 用于开发响应式布局、移动设备优先的WEB项目 1、使用boot 创建文件夹,在文...

wytao1995
今天
10
0
小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
今天
12
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
今天
8
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
今天
11
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部