博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【locust】locust与jmeter性能对比
阅读量:1989 次
发布时间:2019-04-27

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

现在开源和商业的性能测试工具层出不穷,如何选取一款高性能的性能测试工具,成为性能测试最基本需要解决的问题之一

现在主要针对locust与jmeter能提供http接口并发性能pk

locust并发机制

摒弃了进程和线程,采用协程的机制

采用多线程来模拟多用户时,线程数会随着并发数的增加而增加,而线程之间的切换需要占用大量的资源,IO的阻塞和线程的sleep会不可避免的导致并发效率下降
而协程和线程的区别在于,协程避免了系统级资源调度,由此大幅提高了性能

jmeter并发机制

运行在JVM虚拟机上的,jmeter以线程方式来运行

基本原理是建立一个线程池,多线程运行取样器产生大量负载,jmeter通过线程组来驱动多个线程运行测试脚本对被测服务器发起负载,每一个负载机上都可以运行多个线程组

环境准备

1. 服务配置

信息 详情
实例数 5
配置 4c 4g
并发tps 3w

因为对比的是jmeter和locust这两款软件,故服务可以提供的tps远大于工具压测的需求

2. 肉鸡配置

信息 配置 数量
master 4c 4g 1
slave 4c 4g 1

压测链路

在这里插入图片描述

备注:locust和jmeter模拟端和服务端均使用相同的环境

压测脚本

1. jmeter

在这里插入图片描述

2. locust

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Author: lluozh# @Date  : 2020/4/16# @Desc  :from locust import HttpLocust,TaskSet,task,betweenclass MyBlogs(TaskSet):    @task(1)    def get_blog(self):        header = {
} body = {
"roomId": "158589982254376" } req = self.client.get("/api/v1/model", headers=header, params=body, verify=False) # print(req.text) # if req.status_code == 200: # print("success") # else: # print("fails")class websitUser(HttpLocust): task_set = MyBlogs # 设置用户执行任务之间等待的上下限,单位秒 wait_time = between(3, 6) # # 等同于上面wait_time,单位毫秒 # min_wait = 3000 # max_wait = 6000 host = "http://benchmark-server.xxx.com"if __name__ == "__main__": import os # master 启动 # os.system("locust -f locusttest.py --master") # slave 启动 os.system("locust -f locusttest.py --slave --master-host=10.200.0.219")

压测数据

在这里插入图片描述

  1. 使用的压测接口为GET接口,返回数据简单
  2. 每个接口请求后sleep150ms
  3. 本次数据收集根据并发增加的维度,因为同时发现slave的cpu使用也是线性的增加,故没有根据slave不同cpu使用情况来进行数据对比

对比结论

1. 模拟tps

  • cpu 1c locust可以模拟tps 700, jmeter可以模拟tps 3200
  • cpu 2c locust可以模拟tps1400,jmeter可以模拟tps 6400

2. 响应时间

  • 当单核的cpu小于80%时,locust响应时间与服务响应时间相差不大,当cpu大于80%时,出现500ms+的响应时间偏差
  • jmeter在cpu打满时,与apm监控实际处理时间依然小于10ms
  • 响应时间有两种对比
  1. 相同tps时jmeter与locust的响应时间相互对比
  2. 与apm监控服务实际处理的时间
  • 以上接口均针对所模拟压测的该get接口

转载地址:http://jptvf.baihongyu.com/

你可能感兴趣的文章
Html利用PHP与MySQL交互
查看>>
dos简单命令
查看>>
mysql的安装与卸载与Navicat远程连接
查看>>
java实现稀疏数组及将稀疏数组存入硬盘中
查看>>
2021-05-18
查看>>
Flutter 使用插件打开相册、相机
查看>>
libuv实现tcp代理服务器
查看>>
libuv使用不当导致的内存泄漏
查看>>
libuv实现ping包发送和接收
查看>>
基础架构系列篇-CENTOS7安装NGINX
查看>>
基础架构系列篇-系统centos7安装docker+COMPOSE
查看>>
基础架构系列篇-NGINX部署VUE
查看>>
个人电商项目,基于uni-app+ springcloud +VUE技术
查看>>
基础架构系列篇-系统centos7安装kafka
查看>>
基础架构系列篇-系统centos7中docker安装分布式文件存储服务minio
查看>>
知识点记录-java判断系统是linux或windows
查看>>
知识点记录-springboot静态资源映射路径
查看>>
微服务springcloud2系列篇-配置与注册nacos组件
查看>>
用户权限设计-基于RBAC模型
查看>>
微服务springcloud2系列篇-网关GATEWAY跨域问题
查看>>