之前部门有大佬做了压测工具Jmeter的使用报告,让我们开发人员也学了一波,自己也可以对本地和测试环境进行一波压测了,可以看到自己的服务各性能指标。 这里就不扯别的了,直接总结下如何用Jmeter对服务压测; Jmeter下载
1、由运维/开发抓取一段时间内的流量高峰
,然后由此确定接口的起始流量以及各个接口的所占压测流量比例。
2、根据单台服务器所能承受的压力,大致确定最大tps,逐步压到瓶颈
;各个接口所占流量比例也可跟本次压测需求对应调整。
基础线程组(强调单位时间的并发
, 不存在绝对并发),主要适用超卖超发(如多人同时抢一个或多个库存)以及瞬间流量的压力测试场景
持续不断地增加负载
, 发现性能瓶颈以及压出业务承载能力
(目前主要所用模式)。
压力测试按压测模型分为:
每秒发出的请求数
, 从服务端的角度出发, 直接衡量系统的吞吐能力。虚拟并发用户数
, 从业务角度, 也可以理解为同时在线的用户数。 从客户端的角度出发, 摸底业务系统各节点能同时承载的在线用户数, 可以使用该模式设置目标并发, 也就是 jmeter 工具里面的线程数建议使用
此种方法
目前服务端由运维同学监控,监控服务器端CPU利用率、内存使用、连接数等指标;
关于接口响应时间、tps、错误率等指标由测试监控(jmeter),另外目前部署了jmeter+influxdb+grafana监控,可以更方便/详细的查看各指标。
我们开发人员平常压测的时候呢看普罗米修斯的JVM监控大盘就搞定了,然后再看看数据库的压力。
1、RPS模型适用于找出业务/服务器瓶颈及承受能力 2、RPS模型下的吞吐量控制、RPS控制均有缺点,如tps起伏大、大流量瞬间施压过大、线程组设置不准等;此模式目前可用Arrivals Thread Group方式解决 3、对于后续压测方向,期望往业务压测模型方向转,此模型可以更好的模拟用户操作,反应服务器真实承压能力以及系统所能承受的在线用户数。 4、对于有动态控制的需求,可以使用jmeter中的beanshell能力(9000端口)
5、对于高流量或瞬间高流量压测,由于jmeter可施压的线程数有限,可以使用分布式压测方案(已有方案储备);分布式测试时,本地jmeter作为控制机(master),其它机器做为执行机(slave)。master把脚本分发到每台slave上,slave执行脚本。执行完成后,slave再把结果返回给master,master负责收集所有slave的信息并汇总展示