之前部门有大佬做了压测工具Jmeter的使用报告,让我们开发人员也学了一波,自己也可以对本地和测试环境进行一波压测了,可以看到自己的服务各性能指标。 这里就不扯别的了,直接总结下如何用Jmeter对服务压测; Jmeter下载
一.常用压测方法
1.1压测时,确定压测流量的方法一般为:
1、由运维/开发抓取一段时间内的流量高峰
,然后由此确定接口的起始流量以及各个接口的所占压测流量比例。
2、根据单台服务器所能承受的压力,大致确定最大tps,逐步压到瓶颈
;各个接口所占流量比例也可跟本次压测需求对应调整。
1.2目前常用的压测方法有:
- 1、并发测试
- 2、压力(负载)测试
- 3、稳定性压力测试 tps保持高压稳定,一般可取tps最大值的80%持续运行一段时间,比如2h(查看tps稳定性、CPU、内存等指标是否稳定)
- 4、可恢复测试 测试系统能否快速地从错误状态中恢复到正常状态。比如,在一个配有负载均衡的系统中,主机承受了压力无法正常工作后,备份机是否能够快速地接管负载。可恢复测试通常结合压力测试一起来做。
二.常用压测方法详细操作
2.1并发测试
基础线程组(强调单位时间的并发
, 不存在绝对并发),主要适用超卖超发(如多人同时抢一个或多个库存)以及瞬间流量的压力测试场景
2.2压力测试
持续不断地增加负载
, 发现性能瓶颈以及压出业务承载能力
(目前主要所用模式)。
压力测试按压测模型分为:
- 1、RPS 模式(吞吐量模式)(目前所应用的)
RPS(Requests Per Second) 是指每秒请求数。 RPS 模式即“吞吐量式”,通过设置
每秒发出的请求数
, 从服务端的角度出发, 直接衡量系统的吞吐能力。 - 2、并发模式(虚拟用户模式)(业务模型)
并发是指
虚拟并发用户数
, 从业务角度, 也可以理解为同时在线的用户数。 从客户端的角度出发, 摸底业务系统各节点能同时承载的在线用户数, 可以使用该模式设置目标并发, 也就是 jmeter 工具里面的线程数
2.1.1吞吐量模式是目前压测的主要方式,目前可实现方式分为:
- 1、jmeter插件中的Constant Throughput Timer控制,该方式模式下,tps波动较大,线程数设置不准
- 2.Throughput Shaping Timer控制,该方式模式下, rps控制,tps平滑,线程数设置不准
- Arrivals Thread Group( Free-Form Arrivals Thread Group),通过自动控制线程数控制tps,
建议使用
此种方法
- Arrivals Thread Group( Free-Form Arrivals Thread Group),通过自动控制线程数控制tps,
三、压测监控
目前服务端由运维同学监控,监控服务器端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的信息并汇总展示